gcc在i686上找不到位/predefs.h

gcc在i686上找不到位/predefs.h,gcc,ubuntu-12.04,Gcc,Ubuntu 12.04,好的,我从ubuntu 12.04 64位切换到32位,安装了build-essential. 然后我编译并安装了GMP-5.0.5、MPFR-3.1.1、MPC-1.0、ISL-0.10和CLOOG-0.17.0。我签出了主gcc主干的副本,并尝试使用以下配置行(从单独的目录)构建它: 配置运行良好,因此我运行了make&&make check。这运行了一段时间,但随后失败,出现以下错误: /home/matt/GCC/svnbuild/./gcc/xgcc -B/home/matt/GCC/

好的,我从ubuntu 12.04 64位切换到32位,安装了
build-essential.

然后我编译并安装了GMP-5.0.5、MPFR-3.1.1、MPC-1.0、ISL-0.10和CLOOG-0.17.0。我签出了主gcc主干的副本,并尝试使用以下配置行(从单独的目录)构建它:

配置运行良好,因此我运行了
make&&make check
。这运行了一段时间,但随后失败,出现以下错误:

/home/matt/GCC/svnbuild/./gcc/xgcc -B/home/matt/GCC/svnbuild/./gcc/ -B/usr/GCC/svn/i686-pc-linux-gnu/bin/ -B/usr/GCC/svn/i686-pc-linux-gnu/lib/ -isystem /usr/GCC/svn/i686-pc-linux-gnu/include -isystem /usr/GCC/svn/i686-pc-linux-gnu/sys-include    -g -O2 -O2  -g -O2 -DIN_GCC   -W -Wall -Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition  -isystem ./include   -fpic -mlong-double-80 -g -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector   -fpic -mlong-double-80 -I. -I. -I../.././gcc -I../../../svnsrc/libgcc -I../../../svnsrc/libgcc/. -I../../../svnsrc/libgcc/../gcc -I../../../svnsrc/libgcc/../include -I../../../svnsrc/libgcc/config/libbid -DENABLE_DECIMAL_BID_FORMAT -DHAVE_CC_TLS  -DUSE_TLS -o _muldi3.o -MT _muldi3.o -MD -MP -MF _muldi3.dep -DL_muldi3 -c ../../../svnsrc/libgcc/libgcc2.c -fvisibility=hidden -DHIDE_EXPORTS
In file included from /usr/include/stdio.h:28:0,
                 from ../../../svnsrc/libgcc/../gcc/tsystem.h:88,
                 from ../../../svnsrc/libgcc/libgcc2.c:29:
/usr/include/features.h:324:26: fatal error: bits/predefs.h: No such file or directory
 #include <bits/predefs.h>
                          ^
compilation terminated.
make[3]: *** [_muldi3.o] Error 1
make[3]: Leaving directory `/home/matt/GCC/svnbuild/i686-pc-linux-gnu/libgcc
/home/matt/GCC/svnbuild//GCC/xgcc-B/home/matt/GCC/svnbuild//GCC/-B/usr/GCC/svn/i686 pc linux gnu/bin/-B/usr/GCC/svn/i686 pc linux gnu/-isystem/usr/GCC/svn/i686 pc linux gnu/include-isystem/usr/GCC/svn/i686 pc linux gnu/sys include-g-O2-g-O2-DIN\u-GCC-W-Wall-Wwrite-Wwrite-wst-qual-Wmissing原型-世界风格定义-isystem./include-fpic-mlong-double-80-g-DIN_LIBGCC2-fbuilding libgcc-fno stack protector-fpic-mlong-double-80-I.-I.-I././gcc-I./../svnsrc/libgcc-I./../svnsrc/libgcc/../-I../../svnsrc/libgcc/../gcc-I../../svnsrc/libgcc/../include-I../../svnsrc/libgcc/config/libbid-DENABLE\u DECIMAL\u BID\u格式-DHAVE\u CC\u TLS-DUSE\u TLS-o\u muldi3.o-MT\u muldi3.o-MD-MP-MF\u muldi3.dep-DL\u muldi3-c../../../svnsrc/libgcc/libgcc-fvisibility=hidde
在/usr/include/stdio.h:28:0中包含的文件中,
从../../../svnsrc/libgcc/../gcc/tsystem.h:88,
从../../../svnsrc/libgcc/libgcc2.c:29:
/usr/include/features.h:324:26:致命错误:bits/predefs.h:没有这样的文件或目录
#包括
^
编译终止。
生成[3]:***[\u muldi3.o]错误1
make[3]:离开目录`/home/matt/GCC/svnbuild/i686 pc linux gnu/libgcc
我环顾四周,但我似乎发现这个错误是在x86_64上造成的,原因是没有安装
gcc multilib
,因为Ubuntu和Debian使用multiarch系统,将库分开。好吧,好吧……但是我使用的是i686,那么为什么我需要64位库呢?任何帮助都将不胜感激。谢谢。

试试看

sudo apt-get install gcc-multilib

我不认为安装32位系统会改变计算机的体系结构,因为您的计算机将始终是64位计算机。安装64位版本的Ubuntu只能提供更好的多核性能。由于您的计算机仍然是64位计算机,您可能需要一个在64位计算机上编译的C编译器。因此,gcc多库。我想。

gcc多库技巧对我不起作用。相反,在构建环境中设置此选项可以实现以下目的:

C_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)

我这样做了,虽然它消除了错误,但我得到了一个关于gnu/stubs-32.h的新错误,它位于
libc6dev
中。我要回到64位12.04。谢谢接受,因为它确实消除了错误。嗯,那么你已经试着按照这个建议去做了?64位与多处理(核心使用)有什么关系?从32位到64位的主要变化是系统可以使用多少内存,而不是多处理。32位系统支持2GB内存,而64位系统最多可支持16 EB(尽管从技术上讲,64位Intel和AMD机器最多只能处理48位256 TB的内存,这一点目前还足够好)。@DanAlbert:32位系统支持基于内核中定义的页偏移量宏值的虚拟机模型(仅可在内核构建时配置(通常通过CONFIG_VM_SPLIT进行配置))。Linux上32位系统的典型默认值为“3:1”虚拟机拆分,意味着3GB用户模式虚拟内存和1GB内核模式虚拟机。可能是2:2,也可能是1:3。由于Cubian上没有gcc multilib,这为我解决了问题。-顺便说一句,请记住导出C_INCLUDE_PATH=…这对我也有效。Raspbian上也没有gcc multilib。
C_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)