Eu tive o mesmo problema. Fazer links simbólicos de /usr/libs/crt?.o
para /usr/lib/x86_64-linux-gnu/crt?.o
resolveu o problema para mim.
Como posso construir um gcc antigo (especificamente, 4.5.2) no Ubuntu 11.10 e evitar erros sobre "/ usr / bin / ld: não consigo encontrar crti.o: Nenhum arquivo ou diretório"?
Eu fiz um pouco de escavação e encontrei vários itens semelhantes, mas nenhum deles realmente resolveu o meu problema:
Ao executar com strace (conforme esta resposta ), posso veja a referência para crti.o:
13240 open ("crti.o", O_RDONLY) = -1 ENOENT (Nenhum arquivo ou diretório)
Obrigado!
Eu tive o mesmo problema. Fazer links simbólicos de /usr/libs/crt?.o
para /usr/lib/x86_64-linux-gnu/crt?.o
resolveu o problema para mim.
Mesmo versões muito novas do GCC falham com essa mensagem. É porque as novas versões Debian / Ubuntu (vão) suportam multiarch (ou seja, a instalação de binários para várias máquinas em um sistema de arquivos), então as bibliotecas foram removidas dos locais padrão.
Existem patches do GCC para corrigir aqui (final ainda não aprovado versões, mas corretos para o Ubuntu), e eles 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 temporários é uma boa correção:
cd /usr/lib
ln -s x86_64-linux-gnu/crt*.o .
(o nome da pasta será diferente em instalações de 32 bits).
Espero que ajude.
Eu 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 bootstrap da build saiba onde encontrar os arquivos crt?.o
start.
Então, em vez de fazer crt?.o
links simbólicos em /usr/lib
onde eles afetam todo o seu sistema, você pode ligar esses três arquivos no diretório ${prefix}/lib/gcc/...
correspondente ao diretório ${prefix}/bin
que o executável gcc
está instalado Na verdade, isso está quase no topo de seu caminho de busca para os arquivos de inicialização, então ele os encontrará - 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á tem outros arquivos como crtbegin.o
.
Eu criei o GCC 4.1.2 no Ubuntu x86_64. Como você fez, dei uma olhada no strace do último comando "xgcc" procurando por 32bit c runtime, grep-ped / 32 / da seguinte maneira. O tempo de execução do c está no / usr / lib32, que é fornecido pelo pacote libc6-dev-i386.
fgrep /32/ strace-output.txt | grep /usr/lib | head -1
access("/usr/lib/gcc/x86_64-unknown-linux-gnu/4.1.2/32/crti.o", R_OK) = -1 ENOENT (No such file or directory)
Então, eu criei os links simbólicos crt? .o no diretório xgcc procurado.
sudo mkdir -p /usr/lib/gcc/x86_64-unknown-linux-gnu/4.1.2/32
cd /usr/lib/gcc/x86_64-unknown-linux-gnu/4.1.2/32
sudo ln -s /usr/lib32/crt1.o
sudo ln -s /usr/lib32/crtn.o
sudo ln -s /usr/lib32/crti.o
Eu criei com sucesso o GCC 4.1.2.