Linux中设置动态库的路径
例如:在Ubantu对项目进行编译的时候出现: error while loading shared libraries: libmpc.so.3: cannot open shared object file: No such file or directory。
但是在使用 find 去对 libmpc.so.3 库进行查找,发现库又是存在的。这极有可能可能是没有找到库的路径。因此,需要设置LD_LIBRARY_PATH 环境变量。
因为第三方的库并不处于标准的库的搜索路径之下(例如说是 /usr/local/lib ).所以,在进行编译的时候,需要额外的指名 库所在的路径。
库路径的指名方式分为两种:
**1.是在gcc编译的时候,使用-L和-l的方式去指定 库和库的路径:**格式如下:-l 参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的头lib和尾.so去掉就是库名了。这样的话,一个文件一个文件的设置,太麻烦。
**2.设置 LD_LIBRARY_PATH 变量:**在编译的过程中,会根据 LD_LIBRARY_PATH 变量设置的值找寻找库。 而放在/lib和/usr/lib和/usr/local/lib里的库路径是默认的搜索路径。
设置 LD_LIBRARY_PATH 变量的方式:
1.export LD_LIBRARY_PATH=/usr/local/lib
在终端里运行上面这行命令,再运行这个可执行文件,如果运行正常就说明是这个问题。以上做法,只是临时设置变量 LD_LIBRARY_PATH ,下次开机,一切设置将不复存在;
2.可以在 ~/.bashrc 或者 ~/.bash_profile 中加入 export 语句,前者在每次登陆和每次打开 shell 都读取一次,后者只在登陆时读取一次。我的习惯是加到 ~/.bashrc 中,在该文件的未尾,可采用如下语句来使设置生效:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
修改完后,记得关掉当前终端并重新打开一个新的终端,从而使上面的配置生效。
该文章会更新,欢迎大家批评指正。
推荐一个零声学院免费公开课程,个人觉得老师讲得不错,
分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容,点击立即学习:
服务器课程:C++服务器