静态库在链接到目标时,只有链接到可执行程序或者动态库,才会将此静态库全部打包到目标中。如果是静态库B依赖静态库A,则正常情况下,静态库A并不会被打包到静态库B中。此时,那些依赖静态库B的库在链接静态库B的同时,还需要链接静态库A。如果是动态库B链接到静态库A,则A的所有函数都会打包到动态库B中。此时,依赖动态库B的目标在链接动态库B的时候,就不需要再链接静态库A了。
另外,如果想把静态库A打包到静态库B中,则需要用ar命令:
cmake_minimum_required(VERSION 3.22.0)
project(test LANGUAGES CXX)
add_library(z_b STATIC b.cpp)
find_library(Z_A NAMES libz_a.a PATHS /home/zhjs/Coding/C++/static_lib_test/z_a/build/)
message(STATUS "################ ${Z_A} #################"

文章讲述了静态库在链接到目标时的打包规则,说明了静态库与动态库之间的依赖关系。当静态库B依赖A时,A不会被包含在B中,而在链接依赖B的目标时需要同时链接A。动态库则不同,链接静态库A后,A的所有函数会包含在动态库B中。文章还介绍了如何使用CMake和ar命令将多个静态库打包成一个静态库libmerge.a,以便其他目标只需依赖这个合并后的库。
3084

被折叠的 条评论
为什么被折叠?



