Linux静态库和共享库

静态库
说明:编译的时候相当于将静态库编译到你的程序中去。
优点:静态库已经编译到你的程序中去了,扔到任何Linux地懊恼都可以运行。
缺点:导致代码体积变大
生成静态库步骤:
step1:gcc -c -fPIC *.c //-fPIC的作用是生成的.o文件都是与位置无关的.o
step2 : ar rcs libfile.a .o//.o代表step1生成的所有.o文件, nm libfile.a 可以查看静态库的信息,libfile相当于一个归档文件

step3:gcc -Isrc main.c lib/libfile.a -o app //src为头文件所在文件夹,如果在当前文件夹下就不需要了

step4:./app//运行程序

共享库
说明:共享库/动态库没有编译到程序中去 。
优点:代码体积小。
缺点:依赖于当前电脑环境里的主版本号一致,一致则运行,不行则报错。
步骤:
step1: gcc -c -fPIC *.c //与静态库一致

step2: gcc -shared -Wl,-soname,libfile.so.1 -o libfile.so.1.4 *.o

step3:sudo vi /etc/ld.so.conf //ld为加载器,加载这个共享库conf配置文件,接着就将共享库的路径写进去

step4:sudo ldconfig -v // 更新系统里面记录你的共享库的位置,自动生成libmycal.so.1主版本号

step5: gcc main.c lib/libfile.so.1.4 -o app 或者 gcc main.c lib/libfile.so -o app //libfile.so.1.4代表realname,libfile.so代表linkname

step6: ./app//运行程序

附加:ln -s libfile.so.1.4 libfile.so生成linkname

soname作用:用来判断你的程序在当前电脑上能否运行,程序依赖的主版本号与你 的电脑上的主版本号是否一致,如果一致,才可确保运行,否则运行不了,通过soname去找到realname,编译的时候使用。

linkname作用:编译链接时候使用,主要作用方便Makefile,一个符号链接指向真正的库。

猜你喜欢

转载自blog.csdn.net/u011135852/article/details/48719019