动态库的制作与链接详解
目录
前言
前面学习了动态库如何制作。本文详细介绍制作动态库进行链接,这里介绍3种方法:方法一:把动态库文件放到系统默认的路径下即可 (/usr/lib 或者 /lib );方法二:把库所在的路径写入(添加)到环境变量中;方法三:在系统的默认路径下添加一个新的路径
一.动态库
动态库,也被称为动态链接库,是一种在程序运行时被加载到内存中供多个程序共享的库文件。
动态库的主要特点包括:
- 共享性:动态库中的代码和数据可以被多个程序同时使用,有助于减少内存占用和促进代码复用。
- 更新方便:当动态库更新时,所有使用它的程序都能自动受益于改进或修复,无需重新编译这些程序。
- 系统兼容性:操作系统通过动态链接器管理库文件的加载,使得库文件与运行它们的程序在一定程度上解耦,增加了程序在不同系统上的兼容性。
- 文件体积:使用动态库的程序在文件大小上通常比使用静态库的程序更小,因为动态库的内容并不直接包含在执行文件中。
- 平台差异:不同操作系统下动态库的文件扩展名不同,如Windows下为
.dll,而在Linux下为.so。此外,动态库的使用涉及编辑源代码、生成动态库、以及将头文件和库文件提供给需要使用的人等步骤。它提供了一种高效且灵活的方式来管理和使用代码库,尤其在大型项目和复杂系统中尤为重要。
二.动态库链接三种方法
方法一:放到系统默认的路径下即可 (/usr/lib 或者 /lib )
gcc max.c -o max.o -c -fPIC -I../inc gcc sum.c -o sum.o -c -fPIC -I../inc gcc -shared -fPIC -o libmy_lib.so *.o gcc src/*c -I./inc -L./lib -lmy_lib -o bin/main sudo cp lib/libmy_lib.so /usr/lib/方法二:把库所在的路径写入(添加)到环境变量中
方法三:在系统的默认路径下添加一个新的路径
三.方法一
方法1 [ 推荐使用 ]: 系统虽然不知道我们自己的库在哪里, 但是它有一些默认路径(在环境变量中预先写好的路径) 。因此我们可以把自己的动态库文件放到系统默认的路径下即可 (/usr/lib 或者 /lib )
假设我们的文件结构为下图所示,我们需要把sum.c和max.c 封装成动态库
3.1 .o文件生成
输入以下命令,用max.c和sum.c文件生成为max.o和sum.o文件
gcc max.c -o max.o -c -fPIC -I../inc gcc sum.c -o sum.o -c -fPIC -I../inc
3.2 .动态库生成
用.o文件生成动态库
gcc -shared -fPIC -o libmy_lib.so *.o
我们把libmy_lib.so移动到lib目录下,也把.o和.c文件删除掉(这里的main.c中包含主函数main(),所以main.c不能被制作为动态或者静态库,同时也不能删除主函数,删除了程序就跑不了)删减后如下图:
3.3 动态链接
gcc src/*c -I./inc -L./lib -lmy_lib -o bin/main
这里表示我们已经在bin/main,生成可以运行的main文件,但是为什么运行不了,如下图报错
就是因为:没有给自己的动态库文件方到系统默认的路径下即可 (/usr/lib 或者 /lib )
使用sudo进入管理员模式,添加到系统默认路径后输入密码
sudo cp lib/libmy_lib.so /usr/lib/
在根目录usr/lib中可以看见我们生成的动态库
3.4 正常运行
运行我们在bin目录中的main文件,如下图,正常运行
注意:想要删除根目录/usr/lib中我们自己配置的文件,输入以下命令(使用sudo)
sudo rm libmy_lib.so
四.方法二
把库所在的路径写入(添加)到环境变量中
方法二制作动态库:
4.1 删除默认配置
这里使用方法一的的内容进行测试,我们把方法一中在/usr/lib中配置的系统默认路径给删除掉(不删除会干扰方法二),输入以下命令(使用sudo管理员身份进行删除)
sudo rm libmy_lib.so
4.2 复制动态库
把动态库复制到家目录中的新建文件夹my_lib中,
在根目录创建一个文件,把方法一案例中的动态库添加到该文件
现在把动态库存放在我们在家目录的my_lib文件夹中
现在动态库存放在家目录中的my_lib文件夹中
4.3 打开配置文件
vim ~/.bashr在配置文件末尾添加一行
export LD_LIBRARY_PATH=/home/jjy/my_lib:$LD_LIBRARY_PATH
4.4 运行
可以重新打开新的终端或者重新生效配置脚本
source ~/.bashrc //重新生效 ~/.bashrc文件
运行./bin/main,正常运行
五.方法三
在系统的默认路径下添加一个新的路径
5.1打开配置文件
打开配置文件 (libc.conf)
sudo vim /etc/ld.so.conf.d/libc.conf在文件末尾添加行的一行 写入你自己的库的路径 从新生效库的配置文件
5.2 输入sudo ldconfig
输入sudo ldconfig
sudo ldconfig5.3 运行
以上是本期内容,若有不懂或错误欢迎评论!!!
更多推荐
























所有评论(0)