Não é possível construir mais o gcc desde a atualização para o 11.10

5

Na segunda-feira atualizei para o Ubuntu 11.04 (minha instalação inicial) para o 11.10 e agora não consigo mais compilar o gcc a partir do código-fonte. Desde que eu esqueci de desinstalar o pacote gcc antes da atualização, o Ubuntu substituiu o meu compilador 4.7.0 por seu estável 4.6.1. Então eu tentei construir as fontes SVN novamente, mas isso falha. Eu mais recentemente tentei com revisão SVN 180193.

Após algum tempo, a compilação falha com a seguinte mensagem:

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

Eu cofigurou com:

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

E faça isso com:

~/devel/gcc/build$ make -j4

Só para ter certeza, eu fiz um rm -rf * no diretório de compilação no caso de haver algum material quebrado dentro dele. Não ajudou, no entanto.

Essa é a história de fundo. Eu tentei consertá-lo e procurei por bits/predefs.h . Está dentro de /usr/include/i386-linux-gnu . Eu temporariamente consertei o problema fazendo

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

Que é apenas temporário porque agora o gcc reclama que não é possível encontrar crti.o .

O que eu posso encontrar em /usr/lib/i386-linux-gnu . Agora eu poderia também definir C_LIBRARY_PATH - na verdade não funciona - mas sinto que estou lutando contra o sistema aqui. Além disso, mesmo que seja bem-sucedido, meu compilador recém-construído também não saberia sobre o i386-linux-gnu stuff. Então eu teria que definir C_LIBRARY_PATH e C_INCLUDE_PATH antes de cada compilação de cada projeto que eu tenho. Eu poderia adicioná-lo ao meu .bashrc, mas isso subverte o sistema ainda mais .

Então, como eu digo ao processo de criação:

  • Existem diretórios include / lib adicionais e
  • Que deve construir um gcc que também os respeite?

Edit: Esqueci de incluir o comando que causa a mensagem de erro acima. Também posso pensar em outra solução: Copie o material de /usr/include/i386-linux-gnu para /usr/include (a mesma coisa para /usr/lib/i386-linux-gnu para /usr/lib ). Mas isso também não parece certo. Finalmente, o gcc 4.6.1 do sistema pode compilar outras aplicações muito bem, exceto o meu, que usa recursos do C ++ 11 não presentes na série 4.6.

    
por Raphael R. 19.10.2011 / 18:37

4 respostas

2

Aplique este patch e configure com --enable-multiarch (não confunda com multi lib ):

(Que substitui este patch anterior .)

    
por ams 14.11.2011 / 12:16
2

Mais algum material em:

link

Em vez de usar todo o script, a parte principal parece ser:

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

O resultado não é totalmente limpo porque ainda precisa de um script de wrapper após a instalação para ser executado com as opções adicionais corretas. Por exemplo, aqui está o exemplo do artigo /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 "$@"
    
por Earl 01.12.2011 / 05:43
1

O Ubuntu 11.10 traz suporte multi-arch, o que significa que você não deve colocar arquivos de biblioteca em /usr/lib , mas /usr/lib/i386-linux-gnu (32 bits) ou /usr/lib/x86_64-linux-gnu (64 bits).

Use algo como:

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

Você provavelmente precisará especificar LDFLAGS=-L/usr/lib/i386-linux-gnu também.

Além disso, seus caminhos não são muito bonitos: /usr/i686-pc-linux-gnu/lib/ , você pode querer usar opções como --libdir para corrigi-lo.

    
por Lekensteyn 19.10.2011 / 19:17
1

Desde o seu prédio do SVN, você tem certeza de que seu prédio está na mesma revisão? AKA, certifique-se de que o problema não é do autor: -)

    
por balloons 11.11.2011 / 18:45