Linux LD_LIBRARY_PATH学习
1. LD_LIBRARY_PATH是什么?
LD_LIBRARY_PATH是linux系统中一个非常重要的环境变量。
linux会从这个环境变量给定的路径去搜索shared libraries,所以如果你的.so文件所在的path没有加到LD_LIBRARY_PATH中,那么所有需要这个so的程序就无法运行。
echo $LD_LIBRARY_PATH可以查看这个环境变量的值。
2. 如何将你需要的.so的path增加到LD_LIBRARY_PATH中?
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:your_path
通常有以下几种办法:
(1) 在你的shell下面直接去增加需要的path,不过这种办法在你reboot系统之后会丢失;
(2)直接改在/etc/profile中,因为linux是多用户操作系统,所以这种改动的话会对所有的用户有效。以此例来讲虽然影响到所有用户可能不会产生太大的影响,但是除非真的是所有用户都需要这种改动,否则本人不建议这样改。
为什么?
因为软件大概可以分成不可客制化部分(公共流程)加上客制化部分两个部分,如果这本身就是客制化部分需要去解决的问题,又为什么要放到公共流程中来做呢?从软件维护的角度来看,这会给维护带来风险。
你必须要很清楚你的软件中哪些可以归类到可客制化部分,哪些应该要归类到不可客制化部分。所以,我们有了方法(3)。
(3)放到用户自己的配置文件中,以此例来讲我们可以在~/.bash_profile或者~/.bashrc等用户自己的客制化文件中去客制化
LD_LIBRARY_PATH这个环境变量。
3. ./test: error while loading shared libraries: libcurl.so: cannot open shared object file: No such file or directory
出现上述错误的原因是什么?
通常如果出现上述错误,首先要检查libcurl.so是否存在。
如果你不清楚系统中.so文件的存放位置,那就在系统根目录下面查找吧,find ./ -name "libcurl.so",不过查找过程可能会比较久。
如果找不到libcurl.so,那就找到这个.so并整合到你的系统中;
如果能找到libcurl.so,那就echo $LD_LIBRARY_PATH看一下,不出意外的话,你的libcurl.so所在的path应该没有包含在LD_LIBRARY_PATH中。