覆盖 Ubuntu 12.04.1 上库的默认搜索位置

覆盖 Ubuntu 12.04.1 上库的默认搜索位置

mpfr为了在我的 Ubuntu 12.04.1 系统(64 位)上正确编译库,我需要更新C_INCLUDE_PATHLIBRARY_PATHLD_LIBRARY_PATH变量LD_RUN_PATH。这在常问问题用于构建mpfr库。需要更新这些变量,因为gmp库已在搜索路径中,并作为默认 Ubuntu 安装的一部分包含在内。但是,我已将gmp库安装在我的/usr/local/lib目录中。

在我的主目录中,我创建了一个.pam_environment文件并放置了以下几行:

export C_INCLUDE_PATH=/usr/local/include:$C_INCLUDE_PATH
export LIBRARY_PATH=/usr/local/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
export LD_RUN_PATH=/usr/local/lib:$LD_RUN_PATH 

但是,mpfrconfigure脚本仍然无法gmp/usr/local/lib目录中找到我自己版本的库。

查看目录内部/etc/ld.so.conf.d,我的文件内容libc.conf是:

# libc default configuration
/usr/local/lib

此外,该文件的内容x86_64-linux-gnu.conf如下:

# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu

但是locate libgmp在命令行上运行显示系统已经自带了libgmp的版本。

$ locate libgmp
/usr/lib/x86_64-linux-gnu/libgmp.so.10
/usr/lib/x86_64-linux-gnu/libgmp.so.10.0.2
/usr/lib/x86_64-linux-gnu/openssl-1.0.0/engines/libgmp.so
/usr/share/doc/libgmp10
/usr/share/doc/libgmp10/README.Debian
/usr/share/doc/libgmp10/TODO.Debian
/usr/share/doc/libgmp10/changelog.Debian.gz
/usr/share/doc/libgmp10/copyright
/var/lib/dpkg/info/libgmp10:amd64.list
/var/lib/dpkg/info/libgmp10:amd64.md5sums
/var/lib/dpkg/info/libgmp10:amd64.postinst
/var/lib/dpkg/info/libgmp10:amd64.postrm
/var/lib/dpkg/info/libgmp10:amd64.shlibs

问题:

  1. 如何覆盖libgmp链接期间使用的版本的位置?我想使用\usr\local\lib目录中的库。
  2. 我是否应该将C_INCLUDE_PATH和其他变量放在我的.pam_environment文件中,或者是否有更合适的位置?

答案1

这个问题最简单的解决办法似乎是将库安装在另一个位置:

./configure --prefix=/home/usr/local

然后,在链接时选择此目录中的库。另一种可能性是重命名/usr/lib/x86_64-linux-gnu/openssl-1.0.0/engines/libgmp.so为其他名称,但如果该库由系统上安装的程序使用,那么这种方法就不是特别聪明了。

相关内容