动态库和静态库的创建

来源:互联网 发布:沈阳seo公司 编辑:程序博客网 时间:2024/05/18 09:20
库:一组别人实现好的函数接口

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 
0 0
原创粉丝点击