0

Linux共享库路径配置

 3 years ago
source link: https://blog.csdn.net/yanxiangtianji/article/details/8316562
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Linux共享库路径配置

original.png
yanxiangtianji 2012-12-18 22:27:31 articleReadEyes.png 19222
分类专栏: linux

Linux共享库路径配置

  Linux下找不到共享库文件的典型现象为明明已经安装某个软包(如libnet,mysql),编译链接可以正常进行,但是在运行时出现如“error while loading shared libraries: libnet.so.1:cannot open shared object file :No such file or directory”的错误提示。

  原因是Linux下的共享库路径配置不正确。默认的linux共享库搜索路径为/lib和/usr/lib两个目录(不包含子目录),若共享库不在这两个路径(最典型的就是/usr/local/lib),不能被自动动态链接到,解决方法有四种

1,链接时使用静态库(.a文件)。在g++命令上写入改.a文件的完整路径。

2,修改LD_LIBRARY_PATH环境变量。(临时有效,且有时候没有效果)

3,将库文件复制到可以搜索到的路径里面,这样比较狠,但是可能导致一些后即问题。

4,添加搜索路径,使用ldconfig命令(下面详细介绍)。

添加搜索路径方法步骤:

1,先到官网下载对应的源码版本编译安装软件包(make install)。

2,使用locate命令找到该库的被默认安装的路径,使用方法是先用updatedb更新一下locate命令的索引库,然后“locate libnet.so”查找就可以了,在这里我发现,自动编译安装的库文件被放在了/usr/local/lib目录。

3,修改/etc/ld.so.conf,添加路径。在CentOS 6.3下我看到这个文件实际上是包含了/etc/ld.so.conf.d/这个目录下的所有.conf文件,因此我们可以在这个路径下面创建一个新的文件,其中写上诸如“/usr/local/lib”、“/usr/local/mysql/lib”的路径,保存退出。

4,切记一定要主动执行命令:ldconfig,它会更新记录了系统中有哪些so文件的缓存文件(/etc /ld.so.cache)

原载于http://blog.csdn.net/yanxiangtianji

转载请注明出处

另外我发现:http://blog.163.com/lgh_2002/blog/static/44017526201282410131261/ 对于ldconfig的讲解很好,大家可以参考。下面是摘自那里的一段话:

ldconfig几个需要注意的地方
1. 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library会找不到
2. 想往上面两个目录以外加东西的时候,一定要修改/etc/ld.so.conf,然后再调用ldconfig,不然也会找不到
比如安装了一个mysql到/usr/local/mysql,mysql有一大堆library在 /usr/local/mysql/lib下面,这时就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,保存 过后ldconfig一下,新的library才能在程序运行时被找到。
3. 如果想在这两个目录以外放lib,但是又不想在/etc/ld.so.conf中加东西(或者是没有权限加东西)。那也可以,就是export一个全局变 量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时候使用。
4. ldconfig做的这些东西都与运行程序时有关,跟编译时一点关系都没有。编译的时候还是该加-L就得加,不要混淆了。
5. 总之,就是不管做了什么关于library的变动后,最好都ldconfig一下,不然会出现一些意想不到的结果。不会花太多的时间,但是会省很多的事。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK