Linux生成动态库.so与生成静态库.a

动态库共享库

第一步:通过gcc -fPIC -c 编译生成.o文件

gcc -fPIC -c a.c   (编译生成.o文件 -fPIC与位置无关)

gcc -fPIC -c b.c

生成a.o,b.o编译文件。


第二步:通过上面已经生成的a.o,b.o文件生成.so文件
方法1: gcc -shared -Wl -o liba.so a.o
方法2: gcc -shared -Wl,-soname,libab.so.1 -o libab.so.1.10 a.o b.o

第三步:通过依赖库编译生成可执行文件
main.c 引用已经生成的.so文件 libmyab.so.1.10
编译方法:gcc main.c libmyab.so.1.10 -o app
编译生成 app 
运行 $ ./app
出错:error while loading shared libraries: libcalc.so.1: cannot open shared object file: No such file or directory
ldd察看依赖库:
$ ldd app
linux-gate.so.1 =>  (0xb77c8000)
libcalc.so.1 => not found    <============注意
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb760c000)
/lib/ld-linux.so.2 (0xb77c9000)
注意点libcalc.so.1 => not found动态库没有找到
解决方法:把动态库路径添加到配置文件中:$ sudo vi /etc/ld.so.conf
更新动态库:$ sudo ldconfig -v
重新运行./app成功

生成so name : -Wl,-soname,libxxx.so.1
生成link name : ln -s libxxx.so.1.10 xxx.so


静态库
gcc -c -fPIC *.c
ar rcs libxx.a *.o

nm :察看文件包含内容
$ nm libcalc.a 

add.o:
00000000 T add

dive.o:
00000000 T dive

mul.o:
00000000 T mul

sub.o:
00000000 T sub

编译:
$ gcc main.c lib/libcalc.a -o app

静态库和共享库的区别:
静态库优点:app随便放哪都可以运行
缺点:lib合入app导致app体积变大


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值