web-dev-qa-db-fra.com

Impossible de construire plus de gcc depuis la mise à jour vers 11.10

Lundi, je suis passé de Ubuntu 11.04 (mon installation initiale) à 11.10 et maintenant je ne peux plus compiler gcc à partir du code source. Comme j'avais oublié de désinstaller le paquet gcc avant la mise à jour, Ubuntu a remplacé mon compilateur 4.7.0 par son stable 4.6.1. J'ai donc essayé de construire à nouveau les sources SVN, mais cela a échoué. J'ai récemment essayé avec la révision 180193 de SVN.

Après un certain temps, la construction échoue avec le message suivant:

/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.

Je l'ai cofiguré avec:

~/devel/gcc/build$ ../src/configure --prefix=/usr --enable-languages=c++

Et le faire avec:

~/devel/gcc/build$ make -j4

Juste pour être sûr, j’ai fait un rm -rf * dans le répertoire de construction au cas où il y aurait des morceaux cassés à l’intérieur. N'a pas aidé, cependant.


C'est la trame de fond. J'ai essayé de le réparer et j'ai cherché le bits/predefs.h. C'est à l'intérieur de /usr/include/i386-linux-gnu. J'ai temporairement résolu le problème en faisant

~/devel/gcc/build$ C_INCLUDE_PATH=/usr/include/i386-linux-gnu make -j4

Ce qui n’est que temporaire car gcc se plaint de ne pas trouver crti.o.

Que je peux trouver dans /usr/lib/i386-linux-gnuMaintenant, je pourrais définir aussi C_LIBRARY_PATH - En fait, ça ne marche pas - mais j'ai l'impression de lutter contre le système ici. De plus, même si cela réussissait, mon compilateur nouvellement construit ne serait pas non plus au courant de la substance i386-linux-gnu. Donc, je devrais définir C_LIBRARY_PATH et C_INCLUDE_PATH avant chaque construction de chaque projet que j'ai. Je pourrais l'ajouter à mon .bashrc mais cela subvertit le système encore plus.

Alors, comment puis-je dire le processus de construction:

  • Qu'il existe des répertoires include/lib supplémentaires, et
  • Qu'il devrait construire un gcc qui les respecte aussi?

Edit: J'ai oublié d'inclure la commande qui provoque le message d'erreur ci-dessus. Je peux aussi penser à une autre solution: copier le contenu de /usr/include/i386-linux-gnu vers /usr/include (même chose pour /usr/lib/i386-linux-gnu vers /usr/lib). Mais ça ne va pas non plus. Enfin, le système gcc 4.6.1 du système peut compiler parfaitement d’autres applications, à l’exception de la mienne, qui utilise des fonctionnalités C++ 11 non présentes dans la série 4.6.

5
Raphael R.

Appliquez ce correctif et configurez-le avec --enable-multiarch (à ne pas confondre avec multi lib ):

(Cela remplace ce correctif antérieur .)

2
ams

Encore du matériel sur:

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=644986

Plutôt que d'utiliser l'intégralité du script, l'élément clé semble être:

make FLAGS_FOR_TARGET="-B/usr/lib/i386-linux-gnu -I/usr/include/i386-linux-gnu"

Le résultat n'est pas tout à fait propre car il a toujours besoin d'un script wrapper après l'installation pour s'exécuter avec les options supplémentaires appropriées. Par exemple, voici l'exemple de l'article /usr/bin/gcc-4.7:

#!/bin/sh

exec /opt/gcc-4.7/bin/gcc-4.7 -B/usr/lib/i386-linux-gnu -I/usr/include/i386-linux-gnu "$@"
2
Earl

Ubuntu 11.10 apporte une prise en charge multi-Arch, ce qui signifie que vous ne devriez pas placer de fichiers de bibliothèque dans /usr/lib, mais bien dans /usr/lib/i386-linux-gnu (32 bits) ou /usr/lib/x86_64-linux-gnu (64 bits).

Utilisez quelque chose comme:

CFLAGS=-I/usr/include/i386-linux-gnu ./configure [options]

Vous devrez probablement aussi spécifier LDFLAGS=-L/usr/lib/i386-linux-gnu.

De plus, vos chemins ne sont pas très jolis: /usr/i686-pc-linux-gnu/lib/, vous pouvez utiliser des options telles que --libdir pour le corriger.

1
Lekensteyn

Depuis votre bâtiment de SVN, êtes-vous sûr de votre bâtiment de la même révision? AKA, assurez-vous que le problème n'est pas en amont :-)

1
balloons