静态库和动态库

简介: 本文详细介绍了静态库和动态库的概念及使用方法。在 Linux 系统中,静态库以 `libxxx.a` 形式存在,而动态库则为 `libxxx.so`。文章分别讲解了如何创建和使用这两种库,并提供了具体的命令示例。此外,还介绍了将库文件添加到系统目录的方法,包括直接复制到默认库路径、修改环境变量以及编辑系统配置文件等方案。适合初学者了解库文件的基本操作。

静态库和动态库

库文件

库是一个二进制文件,是将 xx.c 编译生成的二进制的机器指令,库又分为动态库和静态库。

linux:

静态库 libxxx.a

动态库 libxxx.so

windows:

静态库 xxx.lib

动态库 xxx.dll

静态库

静态库是以 libxxx.a 格式命名的 lib 是前缀 .a 是后缀 xxx 是库名

如果在编译时使用的是静态库,会将静态库中的机器指令编译到可执行文件中,

可执行文件的体积相对较大,执行效率相对较高。

静态库更新操作比较麻烦,需要重新编译生成可执行文件,否则拿不到新的库里的指令

静态库制作

静态库的制作需要将多个.o 文件打包成一个 libxxx.a 文件,

.o 文件是编译生成的目标文件,是二进制机器指令。

gcc -c xxx.c -o xxx.o
gcc -c xxx1.c -o xxx1.o
gcc -c xxx2.c -o xxx2.o

ar -cr   libxxx.a xxx.o xxx1.o xxx2.o

静态库使用

静态库的使用需要在编译时指定静态库的路径,

-I  :指定头文件的路径
-L  : 指定库文件的路径
-l  : (小写的L)指定链接哪个库

gcc main.c   -I include_path  -L lib_path  -lxxx   -o main

动态库

动态库是以 libxxx.so 格式命名的 lib 是前缀 .so 是后缀 xxx 是库名

动态库与静态库的区别在于,动态库在程序运行时才加载,

静态库在编译时就已经加载到可执行文件中,程序运行时不再加载。

动态库的更新操作比较方便,只需要更新库文件,不需要重新编译可执行文件。

动态库制作

动态库的制作需要将多个.o 文件打包成一个 libxxx.so 文件,

.o 文件是编译生成的目标文件,是二进制机器指令。

gcc -c xxx.c -o xxx.o
gcc -c xxx1.c -o xxx1.o
gcc -c xxx2.c -o xxx2.o

gcc -shared -o libxxx.so xxx.o xxx1.o xxx2.o
或者
gcc -shared -fPIC -o libxxx.so xxx.c xxx1.c xxx2.c

动态库使用

动态库的使用需要在编译时指定动态库的路径,

-I  :指定头文件的路径
-L  : 指定库文件的路径
-l  : (小写的L)指定链接哪个库

gcc main.c   -I include_path  -L lib_path  -lxxx   -o main

将库添加到系统目录

将库添加到系统目录,可以让其他程序调用。

一.一般系统的库目录如下:

可以将自己的库放在系统默认的库的路径下----需要sudo权限
sudo cp libxxx.so /lib
sudo cp libxxx.so /usr/lib

二.也可以将自己的库放在自己指定的目录下,然后在环境变量中添加该目录。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/your/lib
//如果相对当前用户生效 就把该语句放在 ~/.bashrc  文件中
//如果相对所有用户生效 就把该语句放在 /etc/profile 文件中

这样就可以在任何目录下调用自己的库了。

三.通过修改系统配置文件来设置----需要sudo权限

sudo vim  /etc/ld.so.conf.d/libc.conf
将自己的库的路径追加到该文件最后
:wq 保存退出   使用  sudo  ldconfig 来重新加载配置
相关文章
|
4月前
|
Linux 编译器 开发者
C/C++动态库与静态库 的详细解析
C/C++动态库与静态库 的详细解析
488 0
|
4月前
|
消息中间件 NoSQL Linux
静态库与动态库
静态库与动态库
静态库与动态库
vs2019使用静态库
vs2019使用静态库
269 0
|
10月前
|
存储 Cloud Native Linux
C++ 动态库与静态库的区别?
C++ 动态库与静态库的区别?
|
11月前
|
存储 Linux 编译器
什么是链接库 | 动态库与静态库
什么是链接库 | 动态库与静态库
128 0
|
Shell 开发工具 iOS开发
动态库下(5)
动态库下(5)
362 0
动态库下(5)
|
Shell 开发工具 C语言
动态库与静态库
本文目标:⭐认识动态静态库,学会结合gcc选项,制作动静态库⭐⭐了解动态库加载过程⭐。
动态库与静态库
|
vr&ar C语言 索引
静态链接和静态库
静态链接和静态库
162 0
vs2019使用动态库
vs2019使用动态库
193 0
1.4~1.9 静态库和动态库
1.4~1.9 静态库和动态库
149 0
1.4~1.9 静态库和动态库