如何编译为静态库或动态库
来源:互联网 发布:如何做学术海报 知乎 编辑:程序博客网 时间:2024/06/06 05:48
如何告诉cmake编译为静态库或动态库
要将项目编译为库,使用CMAKE的add_library命令:
add_library(<name> [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)
其中,参数STATIC, SHARED, MODULE指定生成库是静态库、动态库或MODULE(具体参照CMAKE文档)。如果没有指定生成STATIC库还是SHARED库,则CMAKE根据变量BUILD_SHARED_LIBS确定编译类型。当BUILD_SHARED_LIBS为true,编译为动态库;否则,编译为静态库。
如何构建Windows平台下的动态库DLL
在构建动态库时,生成两个文件:导入库(.lib)和动态库(.dll)。GCC和mingw默认情况下会导出所有符号,但是vs默认情况下不导出任何符号。如果dll没有导出任何符号,则vs就不会生成导入库(这就是为什么vs构建dll时只生成了.dll,没有生成.lib的原因)。如果要导出函数或类型,必须使用
__declspec( dllexport )。
在VS平台构建dll库时,CMAKE会添加如下预处理定义
MyLibrary_EXPORTS其中,MyLibrary是目标的名字。在程序代码中,需要使用这个定义,如
#if defined (_WIN32) #if defined(MyLibrary_EXPORTS) #define MYLIB_EXPORT __declspec(dllexport) #else #define MYLIB_EXPORT __declspec(dllimport) #endif /* MyLibrary_EXPORTS */#else /* defined (_WIN32) */ #define MYLIB_EXPORT#endif
现在,对与想导出的类或者函数,只需要进行如下声明:
// 导出整个类class MYLIB_EXPORT Foo{ //};// 导出类的静态函数class Foo{public: static MYLIB_EXPORT void fun();};
注:
如果不想使用CMAKE默认的预定义符号MyLibrary_EXPORTS,也可以自己定义符号。如需要定义预处理符号COMPILING_DLL,方法如下:
set_target_properties(MyLibrary PROPERTIES DEFINE_SYMBOL "COMPILING_DLL")
0 0
- 如何编译为静态库或动态库
- linux 如何编译 静态库,动态库
- 如何编译动态库/静态库之编译Qt4.8.5静态库/动态库
- C语言如何编译动态库与静态库
- 如何把一个静态库转化为动态库
- 静态编译,动态编译,静态链接库,动态链接库
- 静态库 动态库 编译
- mhook编译为静态库
- OpenCV编译为静态库
- 有动态库和静态库,g++编译时如何指定链接静态库?
- 如何编译动态库
- 静态编译动态编译;静态链接动态链接;静态库和动态库
- 静态编译动态编译;静态链接动态链接;静态库和动态库
- 静态编译动态编译;静态链接动态链接;静态库和动态库
- 静态编译/动态编译 静态链接/动态链接 静态库/动态库
- 静态编译动态编译;静态链接动态链接;静态库和动态库
- 如何将动态编译改成静态编译?
- 如何使用gcc编译静态库和动态库?以及如何使用?
- x86架构里的cache
- 监听重启之后的短时间会报错ORA-12516
- windows 下搭建测试asm
- 变位词程序的实现
- Linux基础-文件操作
- 如何编译为静态库或动态库
- 【hackerrank】Insertion Sort Advanced Analysis
- leetcode Convert Sorted Array to Binary Search Tree
- 换一种学习方法
- MQTT协议的简单介绍和服务器的安装(一)
- 遇到问题---ERROR 1327: Undeclared variable: calcPrice2_price_temp
- linux下java调用C
- SD卡升级——SDIO_IAP实验
- 5-MPU6050采集的数据