web-dev-qa-db-fra.com

gcc ne peut pas trouver bits / predefs.h sur i686

D'accord, alors je suis passé d'ubuntu 12.04 64 bits à 32 bits et j'ai installé build-essential.

J'ai ensuite compilé et installé GMP-5.0.5, MPFR-3.1.1, MPC-1.0, ISL-0.10 et CLOOG-0.17.0. J'ai extrait une copie du tronc principal de gcc et tenté de la construire avec la ligne de configuration suivante (à partir d'un répertoire séparé):

../svnsrc/configure --prefix=/usr/GCC/svn --enable-__cxa_atexit --with-plugin-ld=/usr/bin/ld.gold --enable-threads=posix --enable-werror --enable-build-with-cxx --with-gmp=/usr/GCC/prereq/svn --with-mpfr=/usr/GCC/prereq/svn --with-mpc=/usr/GCC/prereq/svn --with-isl=/usr/GCC/prereq/svn --with-cloog=/usr/GCC/prereq/svn --enable-languages=c,c++

Configure a bien fonctionné et j'ai donc exécuté make && make check. Cela a fonctionné correctement pendant un certain temps, mais a ensuite échoué avec l'erreur suivante:

/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

J'ai regardé autour de moi, mais tout ce que j'ai semblé trouver, c'est que cette erreur a été causée sur x86_64, en n'installant pas gcc-multilib, Parce qu'Ubuntu et Debian utilisent le système mutiarch, séparant les bibliothèques. D'accord, d'accord ... mais j'utilise i686, alors pourquoi aurais-je besoin des bibliothèques 64 bits? Toute aide serait appréciée. Merci.

69
mmoran

Essayez de faire un

Sudo apt-get install gcc-multilib

Je ne pense pas que l'installation d'un système 32 bits modifie l'architecture de votre ordinateur, car votre ordinateur sera toujours un ordinateur 64 bits. L'installation de la version 64 bits d'Ubuntu ne devrait donner que de meilleures performances multicœurs. Puisque votre ordinateur est toujours un ordinateur 64 bits, vous avez probablement besoin d’un compilateur C qui compilera sur des ordinateurs 64 bits. D'où le gcc-multilib. Je pense.

123
kdazzle

l'astuce gcc-multilib n'a pas fonctionné pour moi. Au lieu de cela, définir ceci dans l'environnement de compilation a eu l'effet escompté:

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