💡
原文中文,约11700字,阅读约需28分钟。
📝
内容提要
在Windows和Linux上开发C++程序时,库的生成和链接方式不同。Linux静态库为.a,动态库为.so;Windows分别为.lib和.dll。编译时需注意库路径设置,Linux用RPATH和LD_LIBRARY_PATH,Windows依赖DLL导入库。CMake可简化构建,优化动态库链接。Windows常用`__declspec(dllexport)`导出符号。
🎯
关键要点
- 在Windows和Linux上开发C++程序时,库的生成和链接方式不同。
- Linux静态库以.a结尾,动态库以.so结尾;Windows分别为.lib和.dll。
- 编译时需注意库路径设置,Linux使用RPATH和LD_LIBRARY_PATH,Windows依赖DLL导入库。
- CMake可简化构建,优化动态库链接。
- Windows常用__declspec(dllexport)导出符号。
- 生成动态库和静态库的命令示例:gcc -shared -fPIC -o libfoo.so foo.c和ar cr libfoo.a libfoo.o。
- 链接动态库时需要设置路径,使用-gcc -o main main.c -I/home/alice/foo -lfoo。
- CMake在构建时默认添加动态库路径,安装时RPATH默认为空。
- Linux动态链接器根据RPATH、LD_LIBRARY_PATH和系统默认路径查找共享库。
- Windows没有类似Linux的RPATH机制,使用DLL时需要.lib文件。
- 隐式链接和显式链接是Windows中使用DLL的两种方式。
- 动态库查找路径在Windows中比较复杂,涉及多个搜索顺序。
- 总结:Linux使用CMake开发时使用RPATH,Windows开发动态库时使用__declspec(dllexport)导出。
➡️