文章目录
- 一、什么是动态库和静态库
- 二、.so | .so.x | .so.x.x.x 的区别
- 三、使用
- 四、异常
- 五、查阅资料
一、什么是动态库和静态库?
在Linux下:
静态库:后缀为.a的文件,例如 libyaml-cpp.a
动态库:后缀为.so的文件,例如 libyaml-cpp.so (shared object)
在Windows下:
静态库:后缀为.lib的文件,例如 xx.lib
动态库:后缀为.dll的文件, 例如 xx.dll (dynamic link library)
二、.so | .so.x | .so.x.x.x 的区别
1. .so 文件
libxxx.so 一般是链接文件,链接到.so.x 等这样的文件中
2. .so.x | .so.x.x.x
libxxx.so.x 是个快捷方式,软链接到实际的文件.so.xxx
三、使用
1.cmake 使用.so 文件
以yaml-cpp为例:
link_directories : 添加非标准的共享库搜索路径
target_link_libraries
: 把目标文件与库文件进行链接
include_directories(/usr/local/include/yaml-cpp)
link_directories( ... )
target_link_libraries(${PROJECT_NAME} libyaml-cpp.so)
2.cmake 使用.a 文件
以yaml-cpp为例:
link_directories : 添加非标准的共享库搜索路径
target_link_libraries
: 把目标文件与库文件进行链接
include_directories(/usr/local/include/yaml-cpp)
link_libraries(" ../libyaml-cpp.a") // 可写绝对路径
四、异常以及解决方法
error while loading shared libraries: libyaml-cpp.so.0.6: cannot open shared object file: No such file or directory
可以将路径换成 /usr/local/lib
即
link_directories( /usr/local/lib )
五、查阅资料
https://blog.csdn.net/zhizhengguan/article/details/107041871