CentOS 中非标准 lib 目录的 ldconfig 问题

CentOS 中非标准 lib 目录的 ldconfig 问题

我正在使用一台虚拟机 (CentOS 5.3),该虚拟机的主驱动器上的存储空间非常小(包括/usr/usr/local等)。大多数存储空间在安装到 的单独驱动器上可用/mnt。因此,在这个驱动器上,我创建了一个基本安装目录(带有binincludelib等子目录)并在那里安装了一个库。

[standage@vm142-46 ~]$ ls -lhp /mnt/lib
total 33M
-rw-r--r-- 1 standage iplant-everyone 21M Dec 21 16:29 libgenometools.a
-rwxr-xr-x 1 standage iplant-everyone 13M Dec 21 16:29 libgenometools.so

然后,我尝试使用我编写的代码链接到该库,但它给了我以下消息。

/usr/bin/ld: cannot find -lgenometools

我意识到我没有更新ldconfig我创建的新安装目录,所以我继续添加/mnt/lib/etc/ld.so.conf运行/sbin/ldconfig.然而,当我尝试再次链接我的代码时,我得到了同样的错误。

我最终能够通过创建符号链接来链接库/usr/local/lib64......

[standage@vm142-46 ~]$ sudo ln -s /mnt/lib/libgenometools.a /usr/local/lib64
[standage@vm142-46 ~]$ sudo ln -s /mnt/lib/libgenometools.so /usr/local/lib64

...但这并没有真正解决我原来的问题,它只是一个管道胶带解决方案。我最初做错了什么以及如何链接到我已安装的库?

答案1

/etc/ld.so.conf只影响动态链接器,即运行时查找库的位置。当您构建可执行文件时,重要的是ld查找库的路径。指定这些的通常方法是传递选项-L;大多数configure脚本都有一种传递附加-L选项的方法。通常没有办法更改 的默认搜索路径ld。您可能会考虑更改 gcc 规范文件,但这将涉及更改 下的文件/usr,而不是/etc.

鉴于您的设置有点尴尬,您可能需要研究一下联合安装以上。/mnt/usr我不知道 CentOS 是否提供了联合挂载的可能性(当然,还有第三方选项,本机的或基于 FUSE 的)。

答案2

您可以使用ldconfig -vldconfig 来查看是否知道新库。我假装,该消息/usr/bin/ld: cannot find -lgenometools是在编译程序的链接阶段,不是吗?然后你必须告诉链接器,它可能会使用-L/mnt/lib参数找到一个库。

相关内容