Aplique este patch e configure com --enable-multiarch (não confunda com multi lib ):
(Que substitui este patch anterior .)
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 - 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 C_LIBRARY_PATH
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:
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.
Aplique este patch e configure com --enable-multiarch (não confunda com multi lib ):
(Que substitui este patch anterior .)
Mais algum material em:
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 "$@"
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.
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: -)