升级到 11.10 后无法再构建 gcc

Rap*_* R. 5 compiling 11.10 gcc application-development

周一,我已从 Ubuntu 11.04(我的初始安装)升级到 11.10,现在我无法再从源代码构建 gcc。由于我在升级前忘记卸载 gcc 包,Ubuntu 用稳定的 4.6.1 替换了我的 4.7.0 编译器。所以我尝试再次构建 SVN 源代码,但失败了。我最近尝试过 SVN 修订版 180193。

一段时间后,构建失败并显示以下消息:

/home/raphael/devel/gcc/build/./gcc/xgcc -B/home/raphael/devel/gcc/build/./gcc/ -B/usr/i686-pc-linux-gnu/bin/ -B/usr/i686-pc-linux-gnu/lib/ -isystem /usr/i686-pc-linux-gnu/include -isystem /usr/i686-pc-linux-gnu/sys-include    -g -O2 -O2  -I. -I. -I../../src/gcc -I../../src/gcc/. -I../../src/gcc/../include -I../../src/gcc/../libdecnumber -I../../src/gcc/../libdecnumber/bid -I../libdecnumber -I../../src/gcc/../libgcc -g -O2 -DIN_GCC   -W -Wall -Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition  -isystem ./include  -fPIC -g -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector   -I. -I. -I../.././gcc -I../../../src/libgcc -I../../../src/libgcc/. -I../../../src/libgcc/../gcc -I../../../src/libgcc/../include -I../../../src/libgcc/config/libbid -DENABLE_DECIMAL_BID_FORMAT -DHAVE_CC_TLS  -DUSE_TLS -o _ashldi3.o -MT _ashldi3.o -MD -MP -MF _ashldi3.dep -DL_ashldi3 -c ../../../src/libgcc/../gcc/libgcc2.c \
    -fvisibility=hidden -DHIDE_EXPORTS
In file included from /usr/include/stdio.h:28:0,
             from ../../../src/libgcc/../gcc/tsystem.h:88,
             from ../../../src/libgcc/../gcc/libgcc2.c:29:
/usr/include/features.h:323:26: fatal error: bits/predefs.h: File or directory not found.
Run Code Online (Sandbox Code Playgroud)

我已经将它与:

~/devel/gcc/build$ ../src/configure --prefix=/usr --enable-languages=c++
Run Code Online (Sandbox Code Playgroud)

并使用:

~/devel/gcc/build$ make -j4
Run Code Online (Sandbox Code Playgroud)

可以肯定的是,我rm -rf * 在构建目录中做了一个,以防里面有一些损坏的东西。没有帮助,虽然。


这就是背景故事。我试图修复它并搜索bits/predefs.h. 它在里面/usr/include/i386-linux-gnu。我暂时解决了这个问题

~/devel/gcc/build$ C_INCLUDE_PATH=/usr/include/i386-linux-gnu make -j4
Run Code Online (Sandbox Code Playgroud)

这只是暂时的,因为现在 gcc 抱怨它找不到crti.o.

我可以在/usr/lib/i386-linux-gnu. 现在我可以设置C_LIBRARY_PATH- 实际上它不起作用 - 但我觉得我在这里与系统作斗争。此外,即使它成功了,我新构建的编译器也不会知道这些i386-linux-gnu东西。所以我会集C_LIBRARY_PATHC_INCLUDE_PATH每一个项目我的每一个构建之前。我可以将它添加到我的 .bashrc 中,但这会更加颠覆系统。

那么,我如何告诉构建过程:

  • 有额外的 include/lib 目录,以及
  • 它应该建立一个尊重他们的gcc吗?

编辑:我忘记包含导致上述错误消息的命令。我也能想到另一种解决办法的:东西从复制/usr/include/i386-linux-gnu/usr/include(同样的事情/usr/lib/i386-linux-gnu/usr/lib)。但这也感觉不对。最后,系统的 gcc 4.6.1 可以很好地编译其他应用程序,除了我的,它使用 4.6 系列中没有的 C++11 特性。

ams*_*ams 2

应用此补丁,并使用 --enable-multiarch 进行配置(不要与 multi lib混淆):

(这取代了之前的补丁。)