静态库进行合并/添加成一个动态/静态库

时间:2025-03-27 10:49:11

静态库进行合并/添加成一个动态/静态库

  • 静态库
    • 静态库包含所有子静态库
  • 动态库
    • 动态库包含所有静态库
  • 总结
  • 参考博客链接


静态库

静态库包含所有子静态库

[root@ggy lib]# ls
    


[root@ggy lib]# ar -x  

[root@ggy lib]# ar -x  

[root@ggy lib]# ar -x  

[root@ggy lib]# ls
          

[root@ggy lib]# ar -cr  *.o
[root@ggy lib]# ls
            

动态库

动态库包含所有静态库

注意静态库生成的时候加上-fPIC,我这里使用的是CMAKE,书写如下:

  • lib1CMAKE静态库
cmake_minimum_required(VERSION 3.6)
project(lib1 C)

set(CMAKE_C_STANDARD 99)
add_compile_options(-fPIC)

add_library(lib1 STATIC  )

file(COPY ./ DESTINATION /tmp/libTest/include)

lib2CMAKE静态库

cmake_minimum_required(VERSION 3.6)
project(lib2 C)

set(CMAKE_C_STANDARD 99)
add_compile_options(-fPIC)

add_library(lib2  )
file(COPY ./ DESTINATION /tmp/libTest/include)

lib3CMAKE动态库

cmake_minimum_required(VERSION 3.6)
project(lib3 C)

set(CMAKE_C_STANDARD 99)

include_directories(/tmp/libTest/include)

link_directories(/tmp/libTest/lib)

add_compile_options(-fPIC)

add_library(lib3 STATIC  )
file(COPY  DESTINATION /tmp/libTest/include)
target_link_libraries(
        lib3
        lib1
        lib2
)
  • 编写出来的便可以独立的进行使用。
  • 该动态库所需要的子静态库,需要使用gcc -fPIC编译出来的.o文件,进行生成静态库,如果不是这样的话,会报错。

总结

笔者在遇见这个问题,在查阅资料并进行测试的过程中只发现了这两种状态下可以进行合并,如果是动态库(子库:动+动/动+静),静态库(字库:动+动/动+静)等情况下,均不可实现库之间的合并。

当然,由于知识受限,可能上述的不可能现象,在某些语法和技巧之下也可以进行合并,有兴趣的还请告知。


参考博客链接

  • linux编程合并多个静态库.a为一个.a