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

Dan*_*age 6 compiling libraries centos path

我与具有主驱动器上很少的存储空间(其中包括虚拟机版本(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
Run Code Online (Sandbox Code Playgroud)

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

/usr/bin/ld: cannot find -lgenometools
Run Code Online (Sandbox Code Playgroud)

我意识到我没有更新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
Run Code Online (Sandbox Code Playgroud)

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

Gil*_*il' 5

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

鉴于你略显尴尬的设置,你可能想寻找到一个工会安装/mnt上方/usr。我不知道 CentOS 提供了哪些联合挂载的可能性(当然,也有第三方选项,原生的或基于 FUSE 的)。