动态库和静态库的创建

库:一组别人实现好的函数接口

1.命名方法 

静态库 : libname.a 
动态库 : libname.so 

注意   :库的名字是name 

2.链接动态库和静态库的区别 

预处理,编译,汇编,链接(连接库)

(1)链接静态库 
如果链接的是静态库,编译器将程序中调用的库中函数接口的实现代码链接到可执行
文件中,生成可执行文件体积大.程序运行的时候,不需要库支持。 

(2)链接动态库 
如果链接的是动态库,编译器将程序中调用的函数所在的库的名字记录在可执行文件中
,生成可执行文件体积小.程序运行的时候,需要[OS]加载动态库。


3.制作静态库

(1)将.c文件编译成.o文件  
gcc -c file.c -o file.o 
.... 

(2)将.o文件打包成静态库 
ar -cr libname.a  *.o 


4.gcc 链接库的参数 

注意:gcc 默认到/usr/lib 和/lib链接库,gcc只能识别它自带的库,第三方库[不是编译器自带库]无法识别 

-L  告诉编译器库的路径 
-l  告诉编译器库的名字 

例如:
gcc main.c -L 库的路径 -l库的名字

5.制作动态库 

(1)将.c文件编译成.o文件  
gcc -c file.c -o file.o 
.... 

(2)将.o文件打包成动态库 
gcc -shared *.o -o libname.so 

---------------------------------------------------
查看可执行文件所依赖的动态库:
readelf -a  可执行文件名 | grep "Shared"
----------------------------------------------------

6. OS 加载库的时候,默认的搜索路径 

(1)环境变量LD_LIBRARY_PATH所包含的路径 

添加环境变量:
export  环境变量名=$环境变量名:新的路径

注意:
直接通过export命令,是临时添加,如果永久有效,将命令写道配置文件
<1>用户主目录下的.bashrc文件 [当前登录的用户打开终端的时候会执行一次]
<2>/etc/bash.bashrc          [所有的用户打开终端的时候都会执行一次]

例如:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/linux/mylib


(2)/usr/lib 和 /lib 

7.当静态库和动态库同时存在,编译器默认链接的是动态库 。 
  如果想强制链接静态库,需要加上 -static 参数  

8.给库加上版本号 

libtest.so.0.1 , libtest.so.0.2 

让编译器链接库成功,必须创建创建一个软链接 

ln -s libtest.so.0.2  libtest.so 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Demon-HY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值