Linux + GCC + 创建动态链接库

本文详细介绍了在Linux环境下使用GCC编译器创建动态链接库的过程,包括源文件准备、Makefile编写、编译及链接过程中遇到的问题及解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.接上一篇linux下使用GCC 编译器创建静态链接库后,这篇来介绍如何创建动态链接库。


2. 还是一样,准备创建动态链接库的 源材料: .c 、 .h 文件,如下图:


3. 编写简单的源文件后,之后创建Makefile,编写Makefile,具体如下:


PS: 较静态链接库的Makefile的区别: (1)在第二行最后添加 -fPIC ,-fPIC 作用: 让编译器将我们的源文件mydll.c编译成位置无关码。

(2)在第三行,我们直接使用gcc 来编译,不用像创建静态链接库时用ar 工具。

   (3)在第三行最后,添加 -shared , 让编译器生成动态链接文件。


4. 然后我们直接来Linux命令符下make即可。ls 可以看到已经生成libmydll.so文件。


5.然后我们创建测试文件test.c ,并将生成的libmydll.so和头文件mydll.h加入到test.c路径下,如下图:



6.接下来,我们编译看看效果,首先我们习惯直接编译: gcc   test.c    -o   test   , 产生如下错误:





7.由错误信息,很容易知道我们未指定我们链接的动态库,修改为: gcc   test.c   -o  test  -lmydll, 产生如下错误信息:



8.由错误信息可知,我们虽然指定了动态链接库的名字,但是没有指定我们使用动态链接库的路径,因此编译器无法找到我们链接的库,修改如下:


PS:最后加上 -L.  解释: -L 后面表示链接的路径,   . 表示当前路径 


9.在第8步骤后,再次编译,无警告无错误。


10.运行执行文件test,如下图:


运行报错:不能加载我们的动态链接库


11. 如果我们的代码包含动态链接库,操作系统默认去查找/usr/lib 中的动态链接库,如果没有找到我们链接的动态链接库就会报错。

解决方法有以下:

(1)复制我们的动态链接库文件到/usr/lib路径中,具体如下:

2增加环境变量,操作系统会优先去找环境变量中的路径,找不到的话,再去/usr/lib路径中找。具体如下:

PS: 增加环境变量:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:你的动态库绝对路径


12. 再次执行可执行文件test,结果正确。具体如上图。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值