Como criar um gcc mais antigo (especificamente 4.5.2) no Ubuntu 11.10 e evitar erros sobre "/ usr / bin / ld: não consigo encontrar crti.o: não existe esse arquivo ou diretório"?
Pesquisei um pouco e encontrei vários itens semelhantes, mas nenhum que realmente resolva meu problema:
- Eu verifiquei que todos os meus pacotes (libc6-dev e similares) são reinstalados por esta pergunta
- Eu verifiquei que o crti.o existe em / usr / lib32 e / usr / lib / x86_64-linux-gnu, e que meu ld.so.conf está configurado para procurar nesses diretórios
- Eu verifiquei que antes de fazer minha chamada de make com LIBRARY_PATH = / usr / lib / x86_64-linux-gnu funciona, mas gostaria de evitar isso (ele se torna um ponto divergente nos makefiles)
- Eu tentei várias coisas com --with-build-sysroot, mas sem sucesso (leia-se: talvez eu simplesmente não saiba o sinalizador certo para definir)
Ao executar com strace (conforme esta resposta ), posso ver a referência simples a crti.o:
13240 open ("crti.o", O_RDONLY) = -1 ENOENT (Esse arquivo ou diretório não existe)
Obrigado!
Mesmo versões muito novas do GCC falham com essa mensagem. É porque as novas versões do Debian / Ubuntu suportam multiarch (ou seja, instalar binários para várias máquinas em um sistema de arquivos), então as bibliotecas foram removidas dos locais padrão.
Existem correções do GCC para corrigi-lo aqui (versões finais ainda não aprovadas, mas corretas para o Ubuntu), e provavelmente se aplicam ao GCC mais antigo sem muito esforço, talvez. Eu acho que você precisa configurar o GCC com --enable-multiarch , ou algo assim.
Enquanto isso, a criação de links flexíveis é uma boa solução:
(o nome da pasta será diferente nas instalações de 32 bits).
Espero que ajude.
fonte
Resolvi esse problema com algumas soluções alternativas que podem ser úteis para você.
Primeiro, crie o GCC com
LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
, para que o processo de inicialização do build saiba onde encontrar oscrt?.o
arquivos de início.Então, em vez de criar
crt?.o
links simbólicos nos locais/usr/lib
em que afetam todo o sistema, você pode vincular esses três arquivos no${prefix}/lib/gcc/...
diretório correspondente ao${prefix}/bin
diretório em que ogcc
executável está instalado. irá encontrá-los - mas eles não afetam mais nada.No meu caso, o diretório específico para colocá-los era
lib/gcc/x86_64-unknown-linux-gnu/4.3.2/
; você pode encontrar o caminho certo, porque ele já possui outros arquivoscrtbegin.o
.fonte
Eu construí o GCC 4.1.2 no Ubuntu x86_64 preciso. Como você fez, dei uma olhada no rastro do último comando "xgcc" procurando pelo tempo de execução de 32 bits c, grep-ped / 32 / da seguinte maneira. O tempo de execução C no meu está em / usr / lib32, que é fornecido pelo pacote libc6-dev-i386.
Então, criei os links simbólicos crt? .O no diretório xgcc procurado.
Criei com êxito o GCC 4.1.2.
fonte