参考:(参考文章用的Makefile,我自己用的CMake。)
静态库链接动态库时,如何使用该静态库_newchenxf的专栏-CSDN博客_链接静态库
1.先建立如下工程目录文件
下载(C++静态库的依赖demo-其它文档类资源-CSDN下载或者
studyNote/1.Dependence at CMake · zion6135/studyNote · GitHub)
2.依赖关系带来的疑惑:
上述工程中:libchild.a依赖libfather.so,生成的可执行文件TestMain依赖libChild.a
问:TestMain是否需要依赖libfather.so?
答案是需要的,否则在ibChild.a中找不到相关的libfather.so实现。
所以要用静态库强烈建议满足两个条件:(1)这个静态库不依赖其他的xxx.so /xxx.a (2)只希望静态库在编译期间作用,程序运行期间不希望依赖这个静态库。\
4.什么时候用xxx.so,什么时候用xxx.a
xxx.so和xxx.a用的区别就是如果不希望这个库在程序运行期间作用:那么就用xxx.a。
如果希望这个库在程序运行期间作用:那么就用xxx.so
验证:
通过修改CMake的add_library决定是生成.a还是.so
add_library(Child STATIC Child.cpp) // 生成libChild.a
add_library(Child SHARED Child.cpp) // 生成libChild.so
- 比如生成的TestMain:依赖libchild.a和libfather.a,那么 ldd TestMain就会看到并没有依赖libchild.a和libfather.a
- 比如生成的TestMain:依赖libchild.a和libfather.so,那么 ldd TestMain就会看到依赖libfather.so
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)