静态库进行合并/添加成一个动态/静态库
静态库
静态库包含所有子静态库
[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
,书写如下:
-
lib1
的CMAKE
(静态库
)
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)
lib2
的CMAKE
(静态库
)
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)
lib3
的CMAKE
(动态库
)
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
便可以独立的进行使用。
总结
笔者在遇见这个问题,在查阅资料并进行测试的过程中只发现了这两种状态下可以进行合并,如果是动态库
(子库:动+动
/动+静
),静态库
(字库:动+动
/动+静
)等情况下,均不可实现库之间的合并。
当然,由于知识受限,可能上述的不可能现象,在某些语法和技巧之下也可以进行合并,有兴趣的还请告知。