码迷,mamicode.com
首页 > 编程语言 > 详细

Meme游戏服务器开发日记(四)scons编译工具、C和C++混合使用

时间:2015-08-26 22:29:05      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:

        今天在编译python so时出现点问题——把其他C库链接到同一个so里——尝试了一早上发现了方法,已经更新到本系列的第二节里了。


        整理了一下工程目录,打算用scons管理。

        scons毕竟是一种新型的build工具,比makefile肯定有很大进步,至少更清晰好学,少了很多晕晕的trick。但是相比其他高级工具比如cmake之类的,就不清楚优劣了。

        这个例子写的过于简单了,正常使用时多用env,可以统一参数,简化编写。

        例子:

obj = Object( "test.c", CPPPATH=["xxx"], CFLAGS=["-g"] )
obj2 = Object( "main.cc", CPPPATH=["xxx"], CFLAGS=["-g", "-std=c++11"] )

Program("out_exe", [obj, obj2], LIBS=["dl"], LINKFLAGS=["-pthread"] )


        注意这个例子里混用了c源码和cpp源码,scons会分别使用gcc和g++进行处理。

        值得一说的是纯C语言的代码部分,需要用以下代码完全包裹起来。

#ifdef __cplusplus

extern "C" {

#endif

// c code

#ifdef __cplusplus

}

#endif


        用C和CPP混合编写的原因是:用dlfcn库操作so时,显然C语言会更方便,C语言的 void* 类型,具有一定的动态语言的特性,非常好用,转换时也基本不会报 warning。同样的代码用 g++ 很难编译过去,要改写法。

        Python的源码也是用C写的,用C调用相对容易。

        但是又打算网络库采用RakNet,RakNet是个大量使用cpp特性编写的库。

        所以难免C和CPP都要用,操作python和so的代码用C风格,大部分底层逻辑和网络部分要用C++。


        

版权声明:本文为博主原创文章,未经博主允许不得转载。

Meme游戏服务器开发日记(四)scons编译工具、C和C++混合使用

标签:

原文地址:http://blog.csdn.net/mayao11/article/details/48009863

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!