Eu tenho um sistema Debian virtual que uso para desenvolver.
Hoje eu queria experimentar llvm / clang.
Depois de instalar o clang, não consigo compilar meus antigos c-projetos (com gcc). Este é o erro:
...
/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
collect2: ld returned 1 exit status
...
Desinstalei o clang e ainda não funcionou.
Alguém tem ideia de como posso consertar isso?
libc0.1-dev
.Respostas:
Debian / Ubuntu
O problema é que provavelmente você só tem o gcc para sua arquitetura atual e isso é 64 bits. Você precisa dos arquivos de suporte de 32 bits. Para isso, você precisa instalá-los
fonte
sudo apt-get install gcc-multilib
e corrigiu meu erro degfortran -m32 ...
O que me ajudou foi criar um link simbólico:
fonte
Parece que enquanto você estava jogando com llvm / clang você (ou o gerenciador de pacotes) removeu o pacote de desenvolvimento de biblioteca C padrão existente ( eglibc no Debian) ou talvez você não o tivesse instalado em primeiro lugar, portanto, você precisa reinstalar agora que você voltou ao gcc.
Você pode fazer isso assim no Debian:
Ubuntu:
No Ubuntu, se você não tiver o libc-dev, já que não consigo encontrá-lo em packages.ubuntu.com, você pode tentar instalar o libc6-dev diretamente.
Ou em sistemas semelhantes ao Redhat:
NB: Embora você tenha recebido uma resposta breve nos comentários, aqui está uma resposta para que haja uma registrada caso alguém encontre esta e possa estar procurando uma resposta, mas não nos comentários ou o comentário não é explícito o suficiente para eles .
fonte
apk add libc-dev=0.7.1-r0
Este é um BUG relatado no launchpad, mas há uma solução alternativa:
Execute para ver onde esses arquivos estão localizados
em seguida, adicione este caminho à variável LIBRARY_PATH
fonte
Se você estiver usando a versão de teste do Debian, chamada 'wheezy', então você pode ter sido mordido pela mudança para multiarch. Mais sobre o multiarch do Debian aqui: http://wiki.debian.org/Multiarch
Basicamente, o que está acontecendo é que várias bibliotecas específicas de arquitetura estão sendo movidas de locais tradicionais no sistema de arquivos para novos locais específicos de arquitetura. É por isso que
/usr/bin/ld
está confuso.Você encontrará crt1.o em ambos
/usr/lib64/
e/usr/lib/i386-linux-gnu/
agora e precisará informar seu conjunto de ferramentas sobre isso. Aqui está alguma documentação sobre como fazer isso; http://wiki.debian.org/Multiarch/LibraryPathOverviewObserve que apenas criar um link simbólico fornecerá apenas uma arquitetura e você essencialmente desativará o multiarch. Embora isso possa ser o que você deseja, pode não ser a solução ideal.
fonte
Depois de ler o http://wiki.debian.org/Multiarch/LibraryPathOverview que jeremiah postou, encontrei o sinalizador gcc que funciona sem o link simbólico:
Então, você pode apenas adicionar
-B/usr/lib/x86_64-linux-gnu
à variável CFLAGS em seu Makefile.fonte
Para obter o RHEL 7 de 64 bits para compilar programas gcc 4.8 de 32 bits, você precisará fazer duas coisas.
Certifique-se de que todas as ferramentas de desenvolvimento gcc 4.8 de 32 bits estejam completamente instaladas:
Compilar programas usando o sinalizador -m32
roubado daqui: Como compilar aplicativos de 32 bits no RHEL de 64 bits? - Eu só tive que fazer o passo 1.
fonte
Conforme explicado no arquivo crti.o ausente , é melhor usar "gcc -print-search-dirs" para descobrir todo o caminho de pesquisa. Em seguida, crie um link conforme explicado acima "sudo ln -s" para apontar para a localização de crt1.o
fonte
Isso funcionou para mim com o Ubuntu 16.04
fonte
./configure --disable-multilib
trabalha para isso
fonte
Corri para isso no CentOs 5.4. Observe que lib64 continha os arquivos crt * .o, mas lib não. Instalei o glibc-devel através do yum que instalou os bits i386 e isso resolveu meu problema.
fonte
Até eu recebi o mesmo erro de compilação quando estava compilando i686-cm-linux-gcc.
A opção de compilação abaixo resolveu meu problema
Nota: O sysroot deve apontar para o diretório do compilador onde usr / include disponível
No meu caso, o conjunto de ferramentas está instalado no diretório / opt / toolchain / i686-cm-linux-gcc e usr / include também está disponível no mesmo diretório
fonte
Eu resolvi da seguinte maneira:
1) tente localizar os arquivos ctr1.o e ctri.o usando
find -name ctr1.o
Tenho o seguinte no meu computador:
$/usr/lib/i386-linux/gnu
2) Adicione esse caminho à
PATH
(tambémLIBRARY_PATH
) variável de ambiente (para ver qual é o nome: digite oenv
comando no Terminal):fonte
Tive o mesmo problema hoje, resolvi-o instalando os pacotes recomendados: libc6-dev-mipsel-cross libc6-dev-mipsel-cross, libc-dev-mipsel-cross
Isso funcionou:
fonte
No meu caso, o erro crti.o foi causado pela configuração do caminho de execução do Matlab. Por exemplo, você não pode executar um arquivo se não tiver definido o caminho do diretório de execução anteriormente. Para fazer isso: Arquivo> setPath, adicione seu diretório e salve.
fonte
usar
gcc -B lib_path_containing_crt?.o
fonte
No meu caso,
Ubuntu 16.04
não tenho nenhumcrti.o
:Então, eu instalo o pacote de desenvolvedor libc 6 -dev:
fonte