2013-01-16 155 views
0

我想從gcc-4.6.1的源碼編譯gcc-4.7.2。編譯錯誤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 

感謝。

回答

0

這在我的~/.bashrc中證明是非常有線的配置問題。我用添加下列行來的.bashrc:

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

echo $C_INCLUDE_PATH的輸出是:如果有在C_INCLUDE_PATH拖尾:,然後也被添加

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

原來.。如果我刪除尾部:,一切都很好。

原因是記錄here

在所有這些變量,一個空元素指示編譯器搜索其當前工作目錄。空元素可以出現在路徑的開始或結尾。例如,如果CPATH的值是:/ special/include,則與`-I具有相同的效果。 -I /特/包括」。