我正在尝试使用 gcc-4.6.1 从源代码编译 gcc-4.7.2。
首先,我运行 contrib/download_prerequisites 下载所需的包,然后按照 LFS http://www.linuxfromscratch.org/blfs/view/svn/general/gcc.html上的说明进行操作
运行时make bootstrap
,我收到错误消息:
In file included from ../../gcc-4.7.2/gcc/c-lang.c:24:0:
../../gcc-4.7.2/gcc/system.h:499:20: error: conflicting types for ‘strsignal’
/usr/include/string.h:566:14: note: previous declaration of ‘strsignal’ was here
我的情况与此处发布的情况相同:http: //gcc.gnu.org/ml/gcc-help/2011-12/msg00062.html。原因也是一样的:gcc找错了config.h
,应该是当前目录下的那个,但实际上是用了下的那个gmp
。
我发现原因是,即使命令行在-I.
所有其他-I
选项之前指定,-I.
也会被忽略,因为它已经在标准搜索路径中。这是我通过运行得到的消息gcc -v
:
ignoring duplicate directory "."
as it is a non-system directory that duplicates a system directory
这是与此问题相关的路径搜索顺序(http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html):“唯一的例外是默认情况下已经搜索了dir。在这种情况下,该选项被忽略,系统目录的搜索顺序保持不变。”
我该怎么做才能让 gcc 在-I
选项指定的其他路径之前搜索当前目录?
产生错误消息的命令是:
gcc -c -DIN_GCC_FRONTEND -g -fkeep-inline-functions -DIN_GCC -W -Wall -Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wmissing-format-attribute -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -Wold-style-definition -Wc++-compat -fno-common -DHAVE_CONFIG_H -I. -I. -I../../gcc-4.7.2/gcc -I../../gcc-4.7.2/gcc/. -I../../gcc-4.7.2/gcc/../include -I../../gcc-4.7.2/gcc/../libcpp/include -I/home/dwang/Downloads/gcc-build/./gmp -I/home/dwang/Downloads/gcc-4.7.2/gmp -I/home/dwang/Downloads/gcc-build/./mpfr -I/home/dwang/Downloads/gcc-4.7.2/mpfr -I/home/dwang/Downloads/gcc-4.7.2/mpc/src -I../../gcc-4.7.2/gcc/../libdecnumber -I../../gcc-4.7.2/gcc/../libdecnumber/bid -I../libdecnumber ../../gcc-4.7.2/gcc/c-lang.c -o c-lang.o
谢谢。