生成与使用静态库/动态库

===================静态库==========================
静态库是.a后缀文件
1.创建一个静态库;
第一步:编译生成二进制文件
第二步:将上步得到的二进制文件用ar命令归档成为一个库
#gcc aston.c -o aston.o -c
#ar -rc libaston.a aston.o


2.使用静态库
#gcc as_test.c -o as_test -laston  
//上边这样是错误的,这样链接器默认到系统库路径中去找aston库,但当前的库放在我们的工作目录
#gcc as_test.c -o as_test -laston -L.
#./as_test
//加上“-L.”后就可以在当前路径下找到你的库,运行成功
/*注:生成的二进制文件隐藏了你的源代码细节,可以保护你的源码不被别
人知道。所以发布时,同时需要发布静态库文件.a、头文件.h和说明,告诉别人怎么使用的你的函数*/




补充:nm命令
#nm aston.a
可以查看到库文件中有多少可以使用的函数




===================动态库==========================
动态库是.so后缀文件
1.创建一个动态库;
第一步:编译生成一个位置无关码二进制文件
第二步:将得到的位置无关二进制文件,生成一个动态库
#gcc aston.c -o aston.o -c -fPIC
#gcc -o libaston.so aston.o -shared 
-fPIC是位置无关码 -shared是按照共享库的方式来链接
2.使用动态库
#gcc -o as_test as_test.c -lpow -L.
此时编译成功,生成了可执行文件;但是还不能成功运行;
3.修改环境变量的方法
链接动态库的程序只用在执行时才被链接使用,而程序只会到系统默认下的几个路径寻找;
所以要么将libaston.so复制到/usr/lib目录下,或者在修改环境变量,/usr/lib为系统文
件夹,不推荐将自己的库放到里边,所以使用修改环境变量的方式;
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/jinyu/lib
完成这步就可以运行程序了
#./as_test


补充:ldd命令
#ldd as_test
可以显示出本程序运行时需要用到哪些共享库





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值