连接动态链接库时找不到链接库的解决办法

连接动态链接库时找不到链接库的解决办法

链接动态库时,可能会出现无法找到链接库的错误,如果用ldd命令就能查看到可执行文件的所有依赖的库。在《linux c一站式编程》一书中看到了一些解决办法,先总结如下四中办法:

方法一

如果只是在开发中临时使用一下,可以使用 LD_LIBRARY_PATH 这个变量进行设置

EXPORT LD_LIBRARY_PATH=当前所依赖的库的路径

这种办法只是临时有效,如果重新启用一个终端,就需要重新设置一次。

方法二

连接动态链接库是由动态链接器决定的,那么首先需要知道动态链接器是如何查找库的。

  • 首先在环境变量 LD_LIBRARY_PATH 所记录的路径中查找,如果没有找到,就进行下一步
  • 从缓存文件 /etc/ld.so.cache 中查找,在root权限下,使用ldconfig命令,读取 /etc/ld.so.conf 文件并生成该缓存文件
  • 如果以上两种办法都没有找到动态库,那么动态链接器会在系统默认路径中查找,先在 /usr/lib/ 中查找,然后再 /lib 中查找

那么,根据以上动态链接器查找库的方法,将库的路径写入 /etc/ld.so.conf 文件中,然后运行ldconfig(ldconfig -v可以查看详细信息),就能生成缓存文件,连接器就能找到库文件

方法三

直接将库文件复制一份到/usr/lib 或者 /lib 目录中,让动态链接器在系统默认路径中查找

方法四

在使用gcc编译时,添加选项 -Wl,-rpath,动态库的路径, 表示-rpath 动态库路径 是由gcc传递给链接器的选项。

gcc main.c -g -L. -lstack -Istack -o main -Wl,-rpath,$PWD

gcc 编译 main.c ,链接动态库libstack.so,头文件在 ./stack目录中,制定的库文件路径在当前路径中

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫步旅人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值