Linux系统编程 31 动态库加载错误原因及解决方式2

本文详细介绍了Linux系统中动态库加载错误的常见原因及四种解决方法:1) 放置到标准库路径;2) 修改~/.bashrc文件;3) 使用超级权限;4) 配置ld.so.conf文件。通过这些方法,可以确保可执行文件正确找到并使用自定义的动态库。
摘要由CSDN通过智能技术生成

Linux系统编程 31 动态库加载错误原因及解决方式2

标准库的时候,就没有修改LD_LIBRARY_PATH,
就可以直接使用。-》动态链接器会去标准c库中
去找想要的动态库。


1.所以我们可以把我们建立的动态库放在标准c库的位置

cp libmymath.so  /lib
cp: cannot create regular file ‘/lib/libmymath.so’: Permission denied
$sudo cp libmymath.so  /lib
[sudo] password for ubuntu: 

2.屏蔽原来修改

$vi ~/.bashrc
#export LD_LIBRARY_PATH=./
#export LD_LIBRARY_PATH=./lib

要先使得修改起作用

$source ~/.bashrc


3.执行可执行文件

$cd code
$cd test
$ls
dynaticlib  file  file2  hello  hello.c  inc  lib  staticlib
$cd dynaticlib/
$ls
inc  resource  test.c  testdy2.out  testdy.out
$./testdy2.out 
4+6=10
4-6=-2
4/6=0

在linux中, ldd是list, dynamic, dependencies的缩写, 意思是, 列出动态库依赖关系。  

$ls
inc  resource  test.c  testdy2.out  testdy.out
$ldd testdy2.out 
    linux-vdso.so.1 =>  (0x00007ffe3efa0000)
    libmymath.so => /lib/libmymath.so (0x00007f82037f4000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f820342b000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f82039f6000)

这种不推荐,因为使用了超级权限

了解就好。


到现在介绍了三种
1.临时生效
export LD_LIBRARY_PATH=***
2.永久生效
修改 ~/.bashrc文件
3.将动态库文件放入标准库下

还有第四种方法

4.配置文件法

在标准库中删除自己的动态库文件

$sudo rm /lib/mymath.so
rm: cannot remove ‘/lib/mymath.so’: No such file or directory
$sudo rm /lib/libmymath.so

将lib文件夹放回dynaticlib中去

$ls
inc  resource  test.c  testdy2.out  testdy.out
$mv ../lib ./
$ls
inc  lib  resource  test.c  testdy2.out  testdy.out

1)打开配置文件

$sudo vi /etc/ld.so.conf

/etc/ld.so.conf 此文件记录了编译时使用的动态库的路径,也就是加载so库的路径

2)输入动态库的绝对路径

/home/ubuntu/code/test/dynaticlib/lib


3)保存退出
4)将配置文件生效
sudo ldconfig -v

$sudo ldconfig -v
/sbin/ldconfig.real: Can't stat /lib/i686-linux-gnu: No such file or directory
/sbin/ldconfig.real: Can't stat /usr/lib/i686-linux-gnu: No such file or directory
//很多内容省略

-v 是显示给用户看的

5)ldd 相关out,查看依赖关系

$ls
inc  lib  resource  test.c  testdy2.out  testdy.out
$ldd testdy2.out
    linux-vdso.so.1 =>  (0x00007ffe86395000)
    libmymath.so => ./lib/libmymath.so (0x00007fcb0bfb0000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcb0bbe7000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fcb0c1b2000)

6)执行可执行文件

$./testdy2.out 
4+6=10
4-6=-2
4/6=0

动态库的制作方法要求一定要会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值