编译gcc-4.7.2时出错

时间:2013-01-16 02:29:53

标签: gcc

我正在尝试使用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

感谢。

1 个答案:

答案 0 :(得分:0)

这在我的~/.bashrc中是一个非常有线的配置问题。我曾经将以下行添加到bashrc:

export C_INCLUDE_PATH=/home/dwang/local/include:/export/scratch/packages/include/:$C_INCLUDE_PATH

echo $C_INCLUDE_PATH的输出是:

/home/dwang/local/include:/export/scratch/packages/include/:

事实证明,如果C_INCLUDE_PATH中存在尾随:,则还会添加.。如果我删除尾随:,一切都很好。

原因记录为here

  

在所有这些变量中,空元素指示编译器搜索其当前工作目录。空元素可以出现在路径的开头或结尾。例如,如果CPATH的值为:/ special / include,则其效果与`-I相同。 -I /特/包括”。