当编译完成的程序依赖某些第三方库时,没配置之前运行程序会报error while loading shared libraries的错误。
实验环境为redhat6.9,假设第三方库存在/home/test/mylib(此路径下不存在子级目录,直接存放.so文件)下。
解决此问题的方法主要有三种:
1. 直接将库文件放入系统默认搜索路径下
系统在进行链接的时候分别从默认路径和用户指定的路径搜索依赖库,默认的搜索路径有"/lib/","/lib64/","/usr/lib"和"/usr/lib64",前面两个是系统用的,最好不要向其中添加别的库文件,后面两个是给用户使用的,安装的应用程序的依赖库就是放到这两个文件夹下边的。
所以我们将/home/test/mylib/下的所有文件拷贝到"/usr/lib"或"/usr/lib64"下,注意不要拷贝文件夹,直接拷贝裸文件。拷贝完毕后即可运行程序。
2. 新建依赖库配置文件
在系统的"/etc/ld.so.conf.d"目录下存放着依赖库的配置文件,首先我们新建一个名字为mylib.conf(名称可随意设置,只要与目录下其他文件不重复即可)的文件,并将依赖库的路径写入。如果出现权限问题,需要切换到root用户下执行。
#进入目录
cd /etc/ld.so.conf.d/
#创建新文件并写入内容
echo "/home/test/mylib/" > mylib.conf
然后刷新配置文件,输入如下指令:
ldconfig
3. 使用LD_LIBRARY_PATH环境变量
LD_LIBRARY_PATH环境变量保存了依赖库的路径,只需要将我们需要用到的库路径追加到此环境变量下就行了。
这里还分为两种类型:
3.1 一次性配置
在终端中输入如下指令:
#格式:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:[依赖库路径]
#例如:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/test/mylib
然后就可以正常运行程序,但是这种方式只在此终端内有效,关闭了此终端,重新打开一个终端后仍然需要重新设置。
3.2 永久配置
编辑当前用户家目录("/home/用户名",此处为"/home/test/")下的.bashrc文件,加入3.1中所述的语句。
cd /home/test/
vim .bashrc
#在最后加入如下语句
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/test/mylib
然后刷新环境变量
source .bashrc
上述操作完成之后即可正常运行程序。