我正在尝试构建GCC 4.7.3。当我用相当旧的系统GCC 4.1构建它时,一切都很好,我得到了GCC 4.7.3。但是,当我试图用刚刚编译的GCC 4.7.3(实际上是自己构建的)来重建它时,我遇到了AS(GNU汇编程序)的麻烦。我将在不使用旧的和有缺陷的系统编译器的情况下构建它。所有路径和库都是正确的(我检查过了)。我可以构建所有先决条件。
但当它开始构建libgcc时,它会专注于检测C-compiller
以下是config.log的一部分,其中有错误:
configure:3335: checking for C compiler version
configure:3344: /root/build/tmp/gcc-build/./gcc/xgcc -B/root/build/tmp/gcc-build/./gcc/ -B/root/build/tmp/gcc/i686-pc-linux-gnu/bin/ -B/root/build/tmp/gcc/i686-pc-linux-gnu/lib/ -isystem /root/build/tmp/gcc/i686-pc-linux-gnu/include -isystem /root/build/tmp/gcc/i686-pc-linux-gnu/sys-include --version >&5
xgcc (GCC) 4.7.3
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
configure:3355: $? = 0
configure:3344: /root/build/tmp/gcc-build/./gcc/xgcc -B/root/build/tmp/gcc-build/./gcc/ -B/root/build/tmp/gcc/i686-pc-linux-gnu/bin/ -B/root/build/tmp/gcc/i686-pc-linux-gnu/lib/ -isystem /root/build/tmp/gcc/i686-pc-linux-gnu/include -isystem /root/build/tmp/gcc/i686-pc-linux-gnu/sys-include -v >&5
Reading specs from /root/build/tmp/gcc-build/./gcc/specs
COLLECT_GCC=/root/build/tmp/gcc-build/./gcc/xgcc
COLLECT_LTO_WRAPPER=/root/build/tmp/gcc-build/./gcc/lto-wrapper
Target: i686-pc-linux-gnu
Configured with: ../../gcc-4.7.3/configure --prefix=/root/build/tmp/gcc --program-suffix=-4.7 --enable-static --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-languages=c,c++ --disable-libssp --disable-multilib --disable-bootstrap --disable-lto --disable-tls --disable-nls --with-as=/root/build/gcc/bin/gcc --enable-version-specific-runtime-libs --with-host-libstdcxx=-lstdc++ --with-mpc=/root/build/tmp/mpc --with-mpfr=/root/build/tmp/mpfr --with-gmp=/root/build/tmp/gmp --with-ppl=/root/build/tmp/ppl --with-cloog=/root/build/tmp/cloog-ppl
Thread model: posix
gcc version 4.7.3 (GCC)
configure:3355: $? = 0
configure:3344: /root/build/tmp/gcc-build/./gcc/xgcc -B/root/build/tmp/gcc-build/./gcc/ -B/root/build/tmp/gcc/i686-pc-linux-gnu/bin/ -B/root/build/tmp/gcc/i686-pc-linux-gnu/lib/ -isystem /root/build/tmp/gcc/i686-pc-linux-gnu/include -isystem /root/build/tmp/gcc/i686-pc-linux-gnu/sys-include -V >&5
xgcc: error: unrecognized command line option '-V'
xgcc: fatal error: no input files
compilation terminated.
configure:3355: $? = 1
configure:3344: /root/build/tmp/gcc-build/./gcc/xgcc -B/root/build/tmp/gcc-build/./gcc/ -B/root/build/tmp/gcc/i686-pc-linux-gnu/bin/ -B/root/build/tmp/gcc/i686-pc-linux-gnu/lib/ -isystem /root/build/tmp/gcc/i686-pc-linux-gnu/include -isystem /root/build/tmp/gcc/i686-pc-linux-gnu/sys-include -qversion >&5
xgcc: error: unrecognized command line option '-qversion'
xgcc: fatal error: no input files
compilation terminated.
configure:3355: $? = 1
configure:3371: /root/build/tmp/gcc-build/./gcc/xgcc -B/root/build/tmp/gcc-build/./gcc/ -B/root/build/tmp/gcc/i686-pc-linux-gnu/bin/ -B/root/build/tmp/gcc/i686-pc-linux-gnu/lib/ -isystem /root/build/tmp/gcc/i686-pc-linux-gnu/include -isystem /root/build/tmp/gcc/i686-pc-linux-gnu/sys-include -o conftest -g -O2 -m32 -march=i686 -msse2 -mfpmath=sse conftest.c >&5
gcc: error: unrecognized command line option '--32'
configure:3374: $? = 1
configure:3562: checking for suffix of object files
configure:3584: /root/build/tmp/gcc-build/./gcc/xgcc -B/root/build/tmp/gcc-build/./gcc/ -B/root/build/tmp/gcc/i686-pc-linux-gnu/bin/ -B/root/build/tmp/gcc/i686-pc-linux-gnu/lib/ -isystem /root/build/tmp/gcc/i686-pc-linux-gnu/include -isystem /root/build/tmp/gcc/i686-pc-linux-gnu/sys-include -c -g -O2 -m32 -march=i686 -msse2 -mfpmath=sse conftest.c >&5
gcc: error: unrecognized command line option '--32'
configure:3588: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "GNU C Runtime Library"
| #define PACKAGE_TARNAME "libgcc"
| #define PACKAGE_VERSION "1.0"
| #define PACKAGE_STRING "GNU C Runtime Library 1.0"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL "http://www.gnu.org/software/libgcc/"
| /* end confdefs.h. */
|
| int
| main ()
| {
|
| ;
| return 0;
| }
configure:3602: error: in `/root/build/tmp/gcc-build/i686-pc-linux-gnu/libgcc':
configure:3605: error: cannot compute suffix of object files: cannot compile
问题是xgcc(内部?)调用GCC作为带有GNU as标志的汇编程序(例如-32),但我不使用GNU as!我只有GCC,并将使用它的汇编程序!在构建libgcc时,是否有任何配置选项或强制使用GCC汇编程序?我的GCC配置参数:
./configure
--prefix=$INST_DIR
--program-suffix=-4.7
--enable-static
--enable-shared
--enable-threads=posix
--enable-__cxa_atexit
--enable-clocale=gnu
--enable-languages=c,c++
--disable-libssp
--disable-multilib
--disable-bootstrap
--disable-lto
--disable-tls
--disable-nls
"--with-as=$GCC_DIR/bin/gcc"
--enable-version-specific-runtime-libs
--with-host-libstdcxx=-lstdc++
"--with-mpc=$MPC_INST_DIR"
"--with-mpfr=$MPFR_INST_DIR"
"--with-gmp=$GMP_INST_DIR"
"--with-ppl=$PPL_INST_DIR"
"--with-cloog=$CLOOG_INST_DIR"
正如您在构建GCC本身时所看到的,我通过"--withas="命令强制使用GCC作为汇编程序。但是,如何在GCC内部libgcc编译阶段做到这一点呢?或者GCC依赖于GNU AS汇编程序
注:
xgcc调用"as"脚本,该脚本调用汇编程序。在我的情况下,"as"有字符串:ORIGINAL_AS_FOR_TARGET="/build/gcc/bin/gcc"并且应该使用GCC作为汇编程序。但是xgcc使用GNU AS特定的参数来调用它。
您很可能(在Linux上)在/usr/bin/as
中安装了GNU as
汇编程序,因此您应该配置
"--with-as=/usr/bin/as"
(我所知道的大多数x86-64 Linux系统都有GNU as,它接受32位和64位指令和指令)。
此外,除非使用--disable-bootstrap
进行配置,否则(非交叉编译器)GCC构建是自启动的:它正在用自己重新编译自己。
顺便说一句,gcc-help@gcc.gnu.org
可能是一个更好的地方来问这些非常具体的GCC问题。
这些天(2014年4月中旬),GCC 4.9终于发布了。更好地编译这个版本(或者至少编译GCC 4.8.2),而不是旧的GCC 4.7.3
正如我所发现的-是的,GCC依赖于binutils和As/LD工具。所以,如果您试图在非常旧或损坏的系统上构建现代GCC,您可能也需要构建binutils。与现代GCC和旧的binutils存在一些非关键但令人讨厌的小不兼容性。好消息是,GCC可以自己构建binutils,如果它们位于他的源树的顶部——互联网上有很多这样的例子。或者您必须手动构建它们并为GCC设置环境。