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

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


静态库

静态库包含所有子静态库

[root@ggy lib]# ls
liblib1.a  liblib2.a  liblib3.a


[root@ggy lib]# ar -x liblib1.a 

[root@ggy lib]# ar -x liblib2.a 

[root@ggy lib]# ar -x liblib3.a 

[root@ggy lib]# ls
lib1.c.o  lib2.c.o  lib3.c.o  liblib1.a  liblib2.a  liblib3.a

[root@ggy lib]# ar -cr lib4.a *.o
[root@ggy lib]# ls
lib1.c.o  lib2.c.o  lib3.c.o  lib4.a  liblib1.a  liblib2.a  liblib3.a

动态库

动态库包含所有静态库

注意静态库生成的时候加上-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 lib1.h lib1.c)

file(COPY ./lib1.h 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 lib2.c lib2.h)
file(COPY ./lib2.h 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 lib3.c lib3.h)
file(COPY lib3.h DESTINATION /tmp/libTest/include)
target_link_libraries(
        lib3
        lib1
        lib2
)
  • 编写出来的liblib3.so便可以独立的进行使用。

总结

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

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


参考博客链接

上一篇:XML学习总结


下一篇:GOGOUP-5.init函数和Import导包