Gcc编译“无法计算目标文件的后缀:无法编译”

我实际上正在阅读LFS书籍(版本7.1),并在第53页被封锁。试着编译gcc,我尝试了下面的命令:

./configure --target=$LFS_TGT --prefix=$LFS/build/gcc-build --disable-nls\ --disable-shared --disable-multilib --disable-decimal-float --disable-threads\ --disable-libmudflap --disable-libssp --disable-libgomp --disable-libquadmath\ --disable-target-libiberty --disable-target-zlib\ --enable-languages=c\ --without-ppl --without-cloog\ --with-mpfr-include=$LFS/source/mpfr/src --with-mpfr-lib=$LFS/source/mpfr/src/.libs\ --with-gmp-include=/mnt/LFS/source/gmp\ --with-gmp-lib=/mnt/LFS/source/gmp/.libs\ --with-mpc-include=/mnt/LFS/source/mpc/src\ --with-mpc-lib=/mnt/LFS/source/mpc/src/.libs 

运行gcc的configuration脚本(当然我已经编译了mpfr,mpc和gmp)。 但是一旦我启动:

 make -j4 

我得到以下错误:

 checking for suffix of object files... configure: error: in `/mnt/LFS/source/gcc-4.6.2/x86_64-lfs-linux-gnu/libgcc': configure: error: cannot compute suffix of object files: cannot compile See `config.log' for more details. make[1]: *** [configure-target-libgcc] Error 1 

我试图谷歌,并尝试了我find的解决scheme,但没有任何工作。 有谁知道我为什么得到这个错误?

当测试程序尝试链接libmpc / libmpfr / libgmp时,此问题是由dyanmic链接库路径问题引起的。

追加下面的环境变量,以允许ld链接正确的文件:

 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/mpc/lib/ 

然后再次尝试编译gcc。

“建设海湾合作委员会并不是一件容易的事情,但是如果你仔细地按照说明去做并不困难,许多人急于尝试去建造它,而没有正确地阅读安装文件,并犯下一个或多个这样的常见错误:

1)不要运行./configure from gcc src dir(这是不支持的)=>你需要从gcc源代码目录之外运行configure

2)注意:如果GCC动态链接到先决条件库(GMP / MPFR / MPC),那么在构建gcc和使用安装的编译器时,共享库必须位于动态链接器的路径(LD_LIBRARY_PATH)*“

简单的例子(没有与GMP / MPFR / MPC的动态链接):

 tar xzf gcc-4.8.0.tar.gz cd gcc-4.8.0 ./contrib/download_prerequisites cd .. mkdir objdir cd objdir $PWD/../gcc-4.8.0/configure --prefix=/opt/gcc-4.8.0 make make install 

来源: Advogato Doc – GNU Doc

这个错误信息可能来自许多不同的原因。 在下面的例子中,找出哪一个是检查日志文件“/home/manu/gcc/gcc/i686-pc-linux-gnu/libgcc/config.log”的最好方法。 或者在原来的海报案例'/mnt/LFS/source/gcc-4.6.2/x86_64-lfs-linux-gnu/libgcc'中找到最后一个错误行。

引用GCC常见问题: http : //gcc.gnu.org/wiki/FAQ#configure_suffix

像任何GNU项目一样,GCC使用GNU自动工具来为编译系统的细节共同配置编译。 因此,配置脚本使用小测试程序(通常称为conftest.c)来测试某些功能和/或功能是否可用。 如果这样的测试程序的编译失败,你会看到一个错误消息,如:

  checking for suffix of object files... configure: error: in `/home/manu/gcc/gcc/i686-pc-linux-gnu/libgcc': configure: error: cannot compute suffix of object files: cannot compile See `config.log' for more details. make[2]: *** [configure-stage1-target-libgcc] Error 1 make[2]: Leaving directory `/home/manu/gcc/gcc' 

这个错误信息是相当具有误导性的,而且这个问题通常与消息无关。 你必须检查发生错误的目录中的文件'config.log'。 在上面的例子中,你需要检查'/ home / manu / gcc / gcc / i686-pc-linux-gnu / libgcc'目录下的'config.log'文件。 可能有几个测试程序在配置过程中失败,但其中一些失败并不重要。 检查文件中的最后一个错误条目。

这个错误信息的常见原因是:

  • 缺少GCC构建所需的库,特别是MPFR,GMP和MPC。 如果安装为共享库,则它们必须位于运行时链接程序的搜索路径中,以便找到它们。 请按照答案中的说明进行操作。为什么./configure和make fail?

  • 编译器崩溃了。 例如,如果存在诸如“conftest.c:内部编译器错误:”之类的错误,则表示编译器中存在错误。 如果您使用的是未经修改的GCC版本,请按照程序报告错误。