linux学习中记录(静态库和动态库)
gcc编译成可执行文件的过程,
一、静态库的打包方法:
gcc *.c -c 把所有.c生成.o文件
gcc -I./inc 是指定头文件路径
gcc -o xiaApp 是生成可执行文件的名字
1.完整的使用
gcc *.c -c -I ./inc
打包成静态库
把所有的.o打包成libadd.a的静态库
ar rcs libadd.a *.o
2.使用打包好的静态库,有两种使用方法:
第一种使用方法,
在main.c中使用libadd.a,-o指定编译成可执行文件的名字,-I指定用到的头文件路径
gcc main.c ./lib/libadd.a -o xiaApp -I./inc
第二种使用方法,
-L指定静态库的路径,-l指定使用静态库的名字,-o指定可执行文件名字,-I 指定使用的静态库的头文件
gcc main.c -L ../lib/ -l add -o testApp -I ../inc
使用nm命令可以查看libadd.a静态库中有什么.o组成
也可以使用nm查看可执行文件nm app
静态库的
优点:
1.发布程序时候,不需要提供对应的库;
2.加载库的速度快。
缺点:
1.由于静态库打包到程序中了,导致库的体积大
2.库发生了改变,需要重新编译程序。
动态库(共享库)的制作
1.命名规则:
1)lib+名字+.so
2.制作步骤:
1)、生成与位置无关.o,gcc -fPIC意思是与位置无关
gcc -fPIC -c *.c -I../inc
2)、将.o打包成共享库(动态库)
gcc -shared -o libmyadd.so *.o -I../inc
3)、用户调用.so的方法
第一种方式
gcc main.c ../lib/libmyadd.so -o soApp -I../inc
第二种方式
gcc main.c -I../inc -L ../lib -lmyadd -o mySoApp
使用ldd +可执行文件,可以看到可执行文件myApp所依赖的动态库
ldd myApp
执行./myApp
1)、把libmyadd.so 拷贝到系统的/lib目录下;
2)、echo $LD_LIBRARY_PATH 查看一下lib路径,
导入路径
export LD_LIBRARY_PATH=./lib/
再查看可执行文件需要的动态库是否正常
ldd test/mySoApp
./test/mySoApp