制作成功后使用./main运行出现如图所示的问题(动态库加载失败)。
因此我们这里尝试一下
ldd main
发现了libcalc.so => not found,也就是没有找到libcalc.so
因此我们尝试在上述环境变量或文件中添加动态库的绝对路径
DT_RPATH段是无法修改的
添加环境变量LD_LIBRARY_PATH
直接在当前目录中添加环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/gaizuo/linux/lesson06/library/lib
$LD_LIBRARY_PATH为引用LD_LIBRARY_PATH的值,:为拼接的意思,即在当前变量后面加上我们需要加载的动态库的绝对路径
成功添加后我们使用
ldd main
查看main所使用的动态库的依赖关系,发现
libcalc.so => /home/gaizuo/linux/lesson06/library/lib/libcalc.so (0x00007f7534502000)
成功找到动态库
尝试运行,成功!
但是这种方法是临时的,也就是关闭终端后就失效了,需要重新添加环境变量后才能成功
用户级别配置
回到home目录下在.bashsrc中添加环境变量
在最后一行加上与上一个方法相同环境变量即可
添加完后重新运行一下.bashsrc,上述三种运行方式都是一样的,运行后到library目录下查看main所使用动态库的依赖关系发现成功找到动态库
系统级配置
删掉上一个方法中在./bashsrc中配置的环境变量并查看main的动态库依赖关系是否成功删除
使用sudo编辑/etc目录下的profile文件,和上两个方法一样在最后一行添加环境变量即可,添加完后保存并退出source一下,然后检查main的动态库依赖关系发现成功找到
运行成功
在/etc/ld.so.cache中添加路径
尝试直接用vim编辑./etc/ld.so.cache
发现该文件是二进制文件无法编辑
因此在/etc/ld.so.conf中添加动态库的绝对路径
然后使用sudo ldconfig更新ld.so.cache
检查main的动态库依赖关系发现成功找到动态库
将动态库添加到/lib或/user/lib目录中(不推荐使用)
因为这两个目录存放了许多系统的库文件,若把自己写的库文件放进去可能会影响系统运行