2008-11-04 56 views
2

我在Fedora Linux机器上工作。Unix问题:自动识别本地安装的库的路径

我有一大堆的二进制文件和库,我安装在我的主目录下。

我想设置我的系统,所以安装软件的功能与我的相同,就好像root用户在没有前缀的情况下安装软件一样。

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

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

回答

1

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

+0

您的意思是LD_LIBRARY_PATH? – 2008-11-04 07:20:47

0

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

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解析包含目录和库。