返回信息流前几天被寝室同学问晕了。
现在想总结一下,写动态库(dll,so)的checklist:
0. 不管用Windows还是*nix,扩展名记得要小写,因为大写的.C意思是“C++”,小写的.c意思是"C语言",很多IDE会根据这个扩展名选择编译器(比如dev-c++)。
1. C语言写的库,如果要兼容C和C++,记得在头文件里加上:
#ifdef __cplusplus
extern "C" {
#endif
// blah blah blah blah
#ifdef __cplusplus
}
#endif
2. C++写的库,除了上述以外,记得慎用函数重载,慎用bool,慎用引用类型,慎用模版,慎用内联,慎用类,慎用继承,慎用多态,慎用STL,记得不同编译器或者同一编译器不同版本会以不同方式实现STL。勤用指针。
3. 如果用的是Windows,记得__declspec(dllexport)和__declspec(dllimport)
#ifdef _WIN32
#ifdef dll
// 编译dll的时候记得在编译器选项里加上dll这个宏定义。
#define EXPORT __declspec(dllexport)
#else
// 编译引用该dll的exe,不要定义dll这个宏。
#define EXPORT __declspec(dllimport)
#endif
#endif
EXPORT int foo (int a, int b);
4. 头文件记得加上
#ifndef __YOUR_FILE_NAME_H__
#define __YOUR_FILE_NAME_H__
// content of the header file
#endif
继续引玉
这是一条镜像帖。来源:北邮人论坛 / cpp / #47951同步于 2010/12/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[集智]一起总结写动态链接库的注意事项
wks
2010/12/18镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 wks 的大作中提到: 】
: 前几天被寝室同学问晕了。
: 现在想总结一下,写动态库(dll,so)的checklist:
: 0. 不管用Windows还是*nix,扩展名记得要小写,因为大写的.C意思是“C++”,小写的.c意思是"C语言",很多IDE会根据这个扩展名选择编译器(比如dev-c++)。
: ...................
LZ大几了,大牛呀
毕业了吧?
【 在 PeterKing 的大作中提到: 】
: : 前几天被寝室同学问晕了。
: : 现在想总结一下,写动态库(dll,so)的checklist:
: : 0. 不管用Windows还是*nix,扩展名记得要小写,因为大写的.C意思是“C++”,小写的.c意思是"C语言",很多IDE会根据这个扩展名选择编译器(比如dev-c++)。
: ...................
【 在 PeterKing 的大作中提到: 】
: : 前几天被寝室同学问晕了。
: : 现在想总结一下,写动态库(dll,so)的checklist:
: : 0. 不管用Windows还是*nix,扩展名记得要小写,因为大写的.C意思是“C++”,小写的.c意思是"C语言",很多IDE会根据这个扩展名选择编译器(比如dev-c++)。
: ...................
lz都研几了。。
噢。。我还以为工作了的才会去研究QT呢。。
【 在 a206206 的大作中提到: 】
: : : 前几天被寝室同学问晕了。
: : : 现在想总结一下,写动态库(dll,so)的checklist:
: : : 0. 不管用Windows还是*nix,扩展名记得要小写,因为大写的.C意思是“C++”,小写的.c意思是"C语言",很多IDE会根据这个扩展名选择编译器(比如dev-c++)。
: ...................
3写错了,下面应该是
__declspec(dllimport)
【 在 wks (cloverprince) 的大作中提到: 】
: 前几天被寝室同学问晕了。
: 现在想总结一下,写动态库(dll,so)的checklist:
: 0. 不管用Windows还是*nix,扩展名记得要小写,因为大写的.C意思是“C++”,小写的.c意思是"C语言",很多IDE会根据这个扩展名选择编译器(比如dev-c++)。
: ...................
ok. 已改正
【 在 FadeToBlack 的大作中提到: 】
: 3写错了,下面应该是
: __declspec(dllimport)
: 【 在 wks (cloverprince) 的大作中提到: 】
: ...................