头文件+宏,完美解决声明函数问题!
2. 编译器宏定义
如果在写库代码的时候,使用的是 C++,而使用者使用的是 C 语言,那么就需要对库函数进行 extern “C” 声明,让编译器不要对函数的名称进行改写。
编译器 g++ 预定义了宏 __cplusplus,因此,在头文件中,就利用了这个宏,在 MY_API 中添加 extern "C" 声明。
四、Windows 平台场景分析
1. 编译生成库文件
(1) 生成静态库
在静态库中,不需要 __declspec(dllexport/dllimport) 的声明,因此只需要区分编译器即可(gcc or g++),在编译选项中定义宏 MY_API_STATIC,即可得到最终的 MY_API 为:
gcc 编译器:#define MY_API
g++ 编译器:#define MY_API extern "C"
(2) 生成动态库
在编译选项中,定义宏 MY_API_EXPORTS,这样最终得到的 MY_API 就会变成:
gcc 编译器:#define MY_API __declspec(dllexport)
g++ 编译器:#define MY_API extern "C" __declspec(dllexport)
2. 使用库
在使用库的应用程序中,也需要在代码中 include 这个头文件,然后加上编译选项中定义的各种宏,来生成对应的 MY_API 宏定义。
(1) 使用静态库
需要在编译选项中定义 MY_API_STATIC,即可得到最终的 MY_API 为:
gcc 编译器:#define MY_API
g++ 编译器:#define MY_API extern "C"
(2) 使用动态库
在编译选项中不需要任何宏定义,即可得到最终的 MY_API 为:
gcc 编译器:#define MY_API extern "C" __declspec(dllimport)
g++ 编译器:#define MY_API __declspec(dllimport)
这样就相当于声明导入库函数了。
五、Linux 平台场景分析
Linux 平台下就简单多了,只需要注意编译器的问题,而没有导出和导入之分。
最新活动更多
-
1月8日火热报名中>> Allegro助力汽车电气化和底盘解决方案优化在线研讨会
-
即日-1.16立即报名>>> 【在线会议】ImSym 开启全流程成像仿真时代
-
即日-1.24立即参与>>> 【限时免费】安森美:Treo 平台带来出色的精密模拟
-
2月28日火热报名中>> 【免费试用】东集技术年终福利——免费试用活动
-
4日10日立即报名>> OFweek 2025(第十四届)中国机器人产业大会
-
7.30-8.1火热报名中>> 全数会2025(第六届)机器人及智能工厂展
推荐专题
-
10 一颗光谱芯片的AI辉光
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论