2

我在 Fedora Linux 机器上工作。

我在我的主目录下本地安装了大量的二进制文件和库。

我想设置我的系统,以便在那里安装软件的功能与(对我而言)相同,就好像 root 用户安装它时没有前缀一样。

我可以通过将该目录添加到我的 PATH 变量中来运行安装在 ~/local/bin 中的二进制文件,但是如何链接到 ~/local/lib 和 ~/local/lib64 中的库呢?

是否有类似于 LD_LIBRARY_PATH 变量但在编译而不是运行时找到库的东西?我不想担心通过 L~/local/lib 或通过 ./configure 脚本中的标志将路径显式传递给编译器。

4

3 回答 3

1

有两种方法可以让库在运行时工作:

  1. 如果库仅供您使用,并且它不是多用户系统,请使用$LD_LIBRARY_PATH环境变量

  2. 如果您是系统上唯一的用户,您可以将目录添加/etc/ld.so.conf/etc/ld.so.conf.d. 之后运行ldconfig重建系统的共享库缓存

在编译时事情还不是很清楚。GNU 链接器支持-rpath参数和$LD_RUN_PATH环境变量来指定库路径。但是,在每种情况下,结果路径最终都会硬编码在二进制文件中,因此如果您随后想要移动文件,则必须重新编译它们。

我相信使用./configure样式脚本构建的程序应该能够找到您的任何库$LD_RUN_PATH,但无法对其进行测试。

在任何一种情况下,运行./configure --prefix=${HOME}/local都应该允许configure解析包含目录和库。

于 2008-11-04T07:35:16.827 回答
1

LIBRARY_PATH环境变量设置为$HOME/local/lib:$HOME/local/lib64. 您还可以设置环境变量C_INCLUDE_PATHCPLUS_INCLUDE_PATH$HOME/local/include. 这些是 GCC 用来查找库和包含文件的环境变量,因此它们可能不适用于其他编译器。

于 2008-11-04T06:13:44.087 回答
0

除了设置 LD_LIBRARY_PATH,您还可以查看 /etc/ld.so.conf(适用于所有用户,甚至是 root)。如果使用 /etc/ld.so.conf,还要考虑系统的安全性;如果人们从您的目录运行该库,他们相信您不会惹恼他们。

于 2008-11-04T07:22:24.293 回答