静态库与动态库的区别

库:从本质来说是一种可执行的二进制代码,与具体的硬件平台有关系。
静态库与动态库(它们从被载入内在的时间不同)
静态库:它是在编译时(具体是在连接时)把库中的相关代码复制到程序中去。
优点:程序运行时不需要库
缺点:程序的体积偏大,
           库的升级不方便。
生成步骤:(相同目录下有hello.c hello.h(自定义的头文件),test.c(测试程序当中有其它函数))
1,gcc -c hello.c(hello.c当中并没有main()只是其它函数的实现。)
2,ar crs -o libhello.a hello.o(生成静态库)
   libhello.a是库文件名,hello是库名,这两者的区分很重要。
3,gcc -o test test.c -lhello(-l后面接的是库名) -L.(-L后面接的当前路径)
平常我们编译的代码不需要加入库名与库路径 是 gcc 默认加入了-lc ,而c库以在默认路径下,故而不需要在加入路径了。
注意点:1,默认的头文件在/include,/usr/include
2, 默认的库在/lib,/usr/lib
3, 默认的加载路径/lib,/usr/lib
如果所需要的文件都在默认的路径下,那么我们就不需要接(-lhello和-L.)了。
还有一点就是-lhello和-L.只能写在后面
动态库:它是在编译时(具体是在连接时)只保留了函数的入口地址,不复制相关的代码。
只有在运行时才把相关代码载入(所以我们还需要一个加载路径)。
优点:节省空间。
           升级方便
缺点:程序的执行效率低
程序执行时需要加载库。
生成步骤:(相同目录下有hello.c hello.h(自定义的头文件),test.c(测试程序当中有其它函数))
1,gcc -fPIC -Wall -c hello.c(hello.c当中并没有main()只是其它函数的实现。)
2,gcc -shared -o libhello.so.1 hello.o
3, ln -s libhello.so.1 libhello.so     (生成link文件,以便于升级的方便)
4,gcc -o test test.c -lhello(-l后面接的是库名) -L.(-L后面接的当前路径)
注意点同上,但是运行程序的时候还不能够运行,就是加载路径问题引起的。
有三种方法可以解决:
1,把库放在/lib或/usr/lib下
2,添加新的加载路径 export LD_LIBRARY_PATH = $LD_LIBRARY_PATH:./
3,新建并编辑/etc/ld.so.conf.d/*.conf,把库所在路径添加进去,最后需要执行ldconfig。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值