静态库编译详解

1.首先介绍下依赖关系:

sub.c 依赖于 common.c

add.c  依赖于 common.c

main.c 以来与 sub.c  add.c

2.编译一个math.a main.c依赖于math.a

说明: 可以使用-lmath 或者 libmath.a 都是可以的.

第一种方式:

yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ gcc -c *.c -I ./include/
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ ar -rcs libmath.a *.o
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ gcc main.c -o main.out -L ./  -lmath  -I ./include/
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ ./main.out 
Hello, World!
执行common-------->function
执行add-------->function
执行common-------->function
执行sub-------->function

第二种方式:

yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ gcc -c *.c -I ./include/
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ ar -rcs libmath.a *.o
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ gcc main.c -o main.out -L ./  libmath.a  -I ./include/
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ ./main.out 
Hello, World!
执行common-------->function
执行add-------->function
执行common-------->function
执行sub-------->function

3.各自编译add sub common,add 和sub 依赖于 common

yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ gcc -c *.c -I ./include/
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ ar -rcs libadd.a add.o
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ ar -rcs libsub.a sub.o
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ ar -rcs libcommon.a common.o
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ gcc main.c -o main.out  -static -L ./  -ladd -lsub -lcommon -I ./include/
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ ./main.out 
Hello, World!
执行common-------->function
执行add-------->function
执行common-------->function
执行sub-------->function

说明: 静态库就算存在以来关系也是可以直接编译的. 但是最后的时候需要-l (小写的L)所有的静态库.

4.add.a sub.a common.a 生成一个动态库(待验证)

$ gcc -shared -fPIC -Wl,--whole-archive libA.a libB.a libC.a -Wl,--no-whole-archive -Wl,-soname -o libcombined.so

你可能感兴趣的:(静态库编译详解)