安装 MPFR 以前版本的 GMP 冲突

安装 MPFR 以前版本的 GMP 冲突

因此,安装 MPFR 时的一个常见错误是,如果安装了多个版本的 libgmp,则会出现错误。这在安装文件中有很好的记录,

如果我运行locate libgmp结果是

/home/lee/maple16/bin.IBM_INTEL_LINUX/libgmp.so
/home/lee/maple16/bin.IBM_INTEL_LINUX/libgmp.so.3
/home/lee/maple16/bin.IBM_INTEL_LINUX/libgmp.so.3.4.1
/home/lee/maple16/bin.IBM_INTEL_LINUX/ATHLON256/libgmp.so
/home/lee/maple16/bin.IBM_INTEL_LINUX/ATHLON256/libgmp.so.3
/home/lee/maple16/bin.IBM_INTEL_LINUX/ATHLON256/libgmp.so.3.4.1
/home/lee/maple16/bin.IBM_INTEL_LINUX/ATHLON512/libgmp.so
/home/lee/maple16/bin.IBM_INTEL_LINUX/ATHLON512/libgmp.so.3
/home/lee/maple16/bin.IBM_INTEL_LINUX/ATHLON512/libgmp.so.3.4.1
/home/lee/maple16/bin.IBM_INTEL_LINUX/ATHLONXPSSE1/libgmp.so
/home/lee/maple16/bin.IBM_INTEL_LINUX/ATHLONXPSSE1/libgmp.so.3
/home/lee/maple16/bin.IBM_INTEL_LINUX/ATHLONXPSSE1/libgmp.so.3.4.1
/home/lee/maple16/bin.IBM_INTEL_LINUX/P4SSE2/libgmp.so
/home/lee/maple16/bin.IBM_INTEL_LINUX/P4SSE2/libgmp.so.3
/home/lee/maple16/bin.IBM_INTEL_LINUX/P4SSE2/libgmp.so.3.4.1
/home/lee/maple16/bin.IBM_INTEL_LINUX/PIII/libgmp.so
/home/lee/maple16/bin.IBM_INTEL_LINUX/PIII/libgmp.so.3
/home/lee/maple16/bin.IBM_INTEL_LINUX/PIII/libgmp.so.3.4.1
/home/lee/maple16/bin.IBM_INTEL_LINUX/PIIISSE1/libgmp.so
/home/lee/maple16/bin.IBM_INTEL_LINUX/PIIISSE1/libgmp.so.3
/home/lee/maple16/bin.IBM_INTEL_LINUX/PIIISSE1/libgmp.so.3.4.1
/usr/lib/i386-linux-gnu/libgmp.so.10
/usr/lib/i386-linux-gnu/libgmp.so.10.0.2
/usr/lib/i386-linux-gnu/openssl-1.0.0/engines/libgmp.so
/usr/local/Wolfram/Mathematica/7.0/SystemFiles/Libraries/Linux/libgmp.so.3
/usr/local/Wolfram/Mathematica/7.0/SystemFiles/Libraries/Linux-x86-64   /libgmp.so.3
/usr/local/Wolfram/Mathematica/8.0/SystemFiles/Libraries/Linux/libgmp.so.10
/usr/local/Wolfram/Mathematica/8.0/SystemFiles/Libraries/Linux-x86-64   /libgmp.so.10
/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:i386.list
/var/lib/dpkg/info/libgmp10:i386.md5sums
/var/lib/dpkg/info/libgmp10:i386.postinst
/var/lib/dpkg/info/libgmp10:i386.postrm
/var/lib/dpkg/info/libgmp10:i386.shlibs

我实际想要使用的版本刚刚安装并且可以看到/usr/local/lib(奇怪的是这没有出现在上面?)。安装文件说如果是这种情况那么

  If you want to use the GMP version under /usr/local, then you
  should uninstall all the other GMP versions (header and library
  files) that may be seen in the search paths, but *NOT* the one
  under /usr (the version under /usr is provided by the OS vendor,
  and changing/removing anything related to it may break your
  system, and /usr should have a lower precedence than /usr/local
  anyway).  

但我不确定到底要卸载什么以及如何卸载,我应该删除吗?而且无论如何locate libgmp都找不到下面的那个。我/usr不想让 Maple 或 Mathematica 死在我身上......

我尝试过的其他修复export CPLUS_INCLUDE_PATH=usr/local/include , export C_INCLUDE_PATH=usr/local/include, export LIBRARY_PATH=usr/local/lib, export LD_LIBRARY_PATH=usr/local/lib, export LD_RUN_PATH=usr/local/lib正如我在其他地方读到的那样,这可能会有所帮助,但无济于事。我也打了最新的补丁。

我天真地刚刚从 /usr/lib/i386-linux-gnu/ 中删除了 libgmp.so.10.0.2 和 libgmp.so.10 ,这似乎导致了 gcc 工作的重大问题,啊

答案1

我实际上想使用的版本刚刚安装并且可以在 /usr/local/lib 中看到(奇怪的是这没有出现在上面?)。

locate依赖于定期重建的数据库updatedb。如果您在两次运行之间将文件添加到系统中updatedblocate自然不会看到它们。 (这个数据库locate比整个文件系统要快得多find。缺点是它的输出可能会过时。)

有多种方法可以强制updatedb再次运行,但该方法取决于特定的 Linux 发行版,并且无论如何都会是一个不同的问题。

我不确定到底要卸载什么以及如何卸载,我应该删除吗?

不,不要删除属于 Maple 和 Mathematica 的副本。他们的安装程序极不可能将这些路径添加到编译器的默认库搜索路径中。

您可以使用以下命令进行检查:

$ ld --verbose | grep SEARCH

您不应该在输出中看到~/maple或。/usr/local/Wolfram

locate libgmp 甚至在 /usr 下都找不到

事实上确实如此。所在的库是您的文档所引用的/usr/lib/i386-linux-gnu库。INSTALLINSTALL文档实际上仅适用于传统的、简单的 *ix 系统。有时 *ixes 与将文件直接放入/usr/lib.在这种情况下,这是因为 x86 Linux 世界中正在进行的 32 到 64 位过渡。

将来的某一天,当所有 32 位系统都消亡时,Linux 发行版可能会恢复到旧的/usr/lib风格。

请注意,您的系统似乎使用的方案即使在 Linux 中也不是通用的。另一种常见的方案是将 32 位库/usr/lib放入/usr/lib64.

这里的重点是,这些系统库目录不能领先于/usr/local/lib你的包的构建系统,从而无法做正确的事情。ld我上面给出的命令会告诉你这一点。如果事实证明它/usr/local/lib并不像 MPFR 创建者所假设的那样领先/usr/lib*,那么你必须找到一种方法来就在前面。

一种方法是:

$ ./configure LDFLAGS=-L/usr/local/lib

文档中可能有更优雅的方法INSTALL。或者,说:

$ ./configure --help | grep -i gmp

这将告诉您是否有任何与 GMP 相关的configure脚本选项,可以让您控制它使用哪个库。

相关内容