动态库和静态库的创建

简介: 库:一组别人实现好的函数接口1.命名方法 静态库 : libname.a 动态库 : libname.so 注意   :库的名字是name 2.链接动态库和静态库的区别 预处理,编译,汇编,链接(连接库)(1)链接静态库 如果链接的是静态库,编译器将程序中调用的库中函数接口的实现代码链接到可执行文件中,生成可执行文件体积大.程序运行的时候,不需要库支持。
库:一组别人实现好的函数接口

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 
相关文章
|
2月前
|
Linux Windows
静态库和动态库
本文详细介绍了静态库和动态库的概念及使用方法。在 Linux 系统中,静态库以 `libxxx.a` 形式存在,而动态库则为 `libxxx.so`。文章分别讲解了如何创建和使用这两种库,并提供了具体的命令示例。此外,还介绍了将库文件添加到系统目录的方法,包括直接复制到默认库路径、修改环境变量以及编辑系统配置文件等方案。适合初学者了解库文件的基本操作。
|
6月前
|
Linux 编译器 开发者
C/C++动态库与静态库 的详细解析
C/C++动态库与静态库 的详细解析
652 0
|
6月前
|
消息中间件 NoSQL Linux
静态库与动态库
静态库与动态库
静态库与动态库
vs2019使用静态库
vs2019使用静态库
302 0
|
存储 Cloud Native Linux
C++ 动态库与静态库的区别?
C++ 动态库与静态库的区别?
|
存储 Linux 编译器
什么是链接库 | 动态库与静态库
什么是链接库 | 动态库与静态库
159 0
|
Shell 开发工具 iOS开发
动态库下(5)
动态库下(5)
374 0
动态库下(5)
|
Shell 开发工具 C语言
动态库与静态库
本文目标:⭐认识动态静态库,学会结合gcc选项,制作动静态库⭐⭐了解动态库加载过程⭐。
动态库与静态库
|
vr&ar C语言 索引
静态链接和静态库
静态链接和静态库
173 0
vs2019使用动态库
vs2019使用动态库
210 0