构建 GCC 需要 GMP 4.2+、MPFR 2.3.1+ 和 MPC 0.8.0+

Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+

提问人:Programmer 提问时间:2/13/2012 最后编辑:Trevor HickeyProgrammer 更新时间:4/27/2022 访问量:128098

问:

我从 http://www.netgull.com/gcc/releases/gcc-4.5.0/ 下载了 GCC 4.5,但是当我尝试设置/构建时,出现以下错误:

Linux:>~/shared_scripts/bin/gcc/gcc-4.5.0 1040> /x/home/prakash_satya/shared_scripts/bin/gcc/gcc-4.5.0/configure CC="gcc -m64" --prefix=/x/home/prakash_satya/shared_scripts/bin/gcc/gcc-4.5.0 --with-gmp-lib=/usr/lib64 --with-mpfr-lib=/usr/lib64 --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-languages=c,c++
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether ln works... yes
checking whether ln -s works... yes
checking for a sed that does not truncate output... /bin/sed
checking for gawk... gawk
checking for gcc... gcc -m64
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc -m64 accepts -g... yes
checking for gcc -m64 option to accept ISO C89... none needed
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking for gnatbind... no
checking for gnatmake... no
checking whether compiler driver understands Ada... no
checking how to compare bootstrapped objects... cmp --ignore-initial=16 $$f1 $$f2
checking for objdir... .libs
checking for the correct version of gmp.h... no
configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+.
Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify
their locations.  Source code for these libraries can be found at
their respective hosting sites as well as at
ftp://gcc.gnu.org/pub/gcc/infrastructure/.  See also
http://gcc.gnu.org/install/prerequisites.html for additional info.  If
you obtained GMP, MPFR and/or MPC from a vendor distribution package,
make sure that you have installed both the libraries and the header
files.  They may be located in separate packages.
Linux:>~/shared_scripts/bin/gcc/gcc-4.5.0 1041>

以下库存在于各自的目录中

/usr/lib/libgmp.a
/usr/lib64/libgmp.a

/usr/lib/libmpfr.a
/usr/lib64/libmpfr.a

我没有在盒子的任何地方安装 libmpc.a 库。

根据错误,我怎么知道:

a) 已安装 libgmp.a 和 libmpfr.a 的当前版本。

b) 如果它们的版本不正确,我如何在不干扰当前版本的情况下部署自己的版本?

GCC GMP MPFR MPC

评论

63赞 Sebastian 4/5/2012
尝试从 GCC 源目录运行。它对我有用(虽然对于当前版本的 gcc(./contrib/download_prerequisites.shgcc-4.7)
29赞 Jeroen Ooms 10/6/2014
该脚本似乎不再具有 .sh 扩展名:。./contrib/download_prerequisites
0赞 bobpaul 12/13/2017
download_prerequisites.sh是在 4.6 中添加的。4.5.0 没有它。
0赞 hypers 11/8/2023
./contrib/download_prerequisites 也适用于 gcc-4.8.5。谢谢。

答:

12赞 Jonathan Leffler 2/13/2012 #1

在我安装这些库的目录中(),我还有一个文件(和和文件),其中包含可读文本。SO 版本信息就在那里,但这与“产品版本”并不完全相同。相反,它讲述了链接兼容性。/usr/gnu64/liblibgmp.lalibmpc.lalibmpfr.la

我试图调查我拥有的版本,我想出的奇怪解决方案是运行我使用该选项构建的 GCC (4.6.1)。在某种程度上,它说:-v

GNU C (GCC) version 4.6.1 (x86_64-apple-darwin11.1.0)
    compiled by GNU C version 4.6.1, GMP version 5.0.1, MPFR version 3.0.0, MPC version 0.8.2
warning: GMP header version 5.0.1 differs from library version 5.0.2.
warning: MPFR header version 3.0.0 differs from library version 3.1.0.
warning: MPC header version 0.8.2 differs from library version 0.9.

因此,似乎我安装了 GMP 5.0.2(但我用 5.0.1 构建了 GCC)和 MPFR 3.1.0(但我用 3.0.0 构建了 GCC)和 MPC 0.9(但我用 0.8.2 构建了 GCC)。出现不匹配是因为我尝试编译和安装 GCC 4.6.2,它可能需要更新的版本。(我没有成功,但那是另一回事了。

我在 中安装了我的自定义库,然后告诉 GCC 在哪里可以找到它们,使用配置选项 , , .这些路径被硬连接到 GCC 中,并从那里开始工作。/usr/gnu64/lib--with-mpfr=/usr/gnu64/lib--with-gmp=/usr/gnu64/lib--with-mpc=/usr/gnu/64/lib

评论

0赞 Programmer 2/13/2012
我尝试了相同的步骤,但是使用--with-gmp/mpfr将.a和.la复制到本地文件夹到本地文件夹,但它仍然给出相同的错误。此外,我从 gcc.gnu.org/pub/gcc/infrastructure [gmp-4.3.2.tar.bz2,mpfr-2.4.2,mpc-0.8.1.tar.gz] 下载并构建 gmp/mpfr/mpc .tar.bz2,但构建 mpc 状态 - 配置:错误:需要 GMP 版本 >= 4.2,而 gcc 仍然存在相同的错误。
0赞 Jonathan Leffler 2/13/2012
@Prakash:在这种情况下,假设 GCC 及其配置套件知道它在做什么,并继续编译和安装其他三个库。我一直把它作为一个单独的操作来完成,没有参考GCC(即使GCC触发了重建)。我相信可能有一种方法可以让 GCC 构建和安装库 - 通过在 GCC 源代码树中拥有 GMP、MPFR、MPC 的源代码。检查输出以获取信息。./configure --help
2赞 Jonathan Leffler 4/30/2014
自从写这篇文章以来,我开始让 GCC 与编译器一起构建 GMP、MPFR 和 MPC 的版本。我现在获取当前版本库的源代码,并将其解压缩到 GCC 源代码的顶级目录中:gmp-6.0.0、mpfr-3.1.2 等。然后我为他们每个人创建一个符号链接:.然后我运行 GCC configure 和 build,GCC 也构建这些库。ln -s gmp-6.0.0 gmp; ln -s mpfr-3.1.2 mpfr; ln -s mpc-1.0.2 mpc
73赞 Damico 6/18/2013 #2

我在尝试安装/编译 GCC 4.8.1 时遇到了同样的问题。这是我解决的方法:

在 Debian 中,只需运行以下两个命令:

apt-get install libmpc-dev
./configure

评论

2赞 Jonathon Hill 12/28/2013
在 Amazon Linux 上,它是sudo yum install libmpc-devel
1赞 bebbo 6/19/2016
Centos 还需要sudo yum install libmpc-devel
0赞 7/27/2018
在 ubuntu 16 上,它是 sudo apt-get install libmpc-dev
0赞 Nathan B 4/22/2021
在 Raspbian 9.13 上没有 libmpc-dev 这样的东西
25赞 etherice 11/14/2014 #3

我在编译 GCC 4.9 分支时遇到了同样的问题。

对于基于 Red HatFedora 的系统,请运行以下命令:

sudo yum install gmp gmp-devel mpfr mpfr-devel libmpc libmpc-devel

这将安装用于整数、浮点数和复数的 GNU 多精度 (MP) 库。

265赞 Joseph Hansen 7/19/2016 #4

在 gcc 目录中,执行以下命令:

./contrib/download_prerequisites

在该脚本之后,GMP、MPFR 和 MPC 即可使用。继续 。./configure

评论

2赞 Emile Vrijdags 12/10/2016
试图在 Windows 上的 ubuntu 上的 bash 上安装 gcc 6.2,这个命令对我有用。谢谢!
3赞 Arnon 4/9/2017
谢谢你。我被困在一台没有的机器上,这解决了我的困境sudo
0赞 cn123h 4/14/2019
值得一提的是:这个命令必须在gcc源根文件夹中运行,它会下载下面的文件,如果在其他地方运行,配置仍然找不到正确的文件。
1赞 Alexander Samoylov 10/2/2019
谢谢。当我想在那里编译较新的 GCC 时,即使在非常旧的 CentOS 4 上,它也对我有用。
1赞 hypers 11/8/2023
也适用于 gcc-4.8.5。
1赞 Jiajia Li 10/29/2019 #5

Centos7:sudo yum 安装 libmpc-devel

评论

1赞 Josh 10/29/2019
很高兴你提供答案。仅供参考,而不仅仅是给出答案,告诉其他人为什么要运行该命令以及它应该做什么会很有帮助。确保您回答所有提出的问题也是一个好主意
0赞 Acimpoeru 4/27/2022 #6

我已将 contrib/download_prerequisites 中的base_url更改为 base_url='gcc.gnu.org/pub/gcc/infrastructure/'。然后只需按照 gcc 网站上的步骤操作即可。这效果很好。希望这会有所帮助。

评论

0赞 Community 4/29/2022
您的答案可以通过额外的支持信息得到改进。请编辑以添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到有关如何写出好答案的更多信息。
0赞 LUser 1/29/2023
另一条评论更好地回答了这个问题。您的答案应该被删除。stackoverflow.com/a/38460654/1935655