O gcc não funciona mais após a atualização

8

Como um exemplo:

hsmyers@ubuntu:~/c_dev$ cat hello.c
#include <stdio.h>

int main(int argc,char **argv) {
printf("Hello World!\n");
return 0;
}
hsmyers@ubuntu:~/c_dev$ gcc -c -o hello.o hello.c
In file included from /usr/include/stdio.h:28:0,
             from hello.c:1:
/usr/include/features.h:323:26: fatal error: bits/predefs.h: No such file or directory
compilation terminated.

Adivinhar em algum lugar ao longo do caminho depois de tentar corrigir a mensagem de erro:

/ usr / bin / ld: não é possível encontrar crt1.o: Esse arquivo ou diretório não existe

Eu estraguei tudo completamente. Alguém poderia por favor aconselhar?

hsmyers
fonte
Você já possui o libc-dev instalado? Compila bem para mim.
itnet7

Respostas:

10

Você precisa instalar um gcc-multilibpacote que traga cabeçalhos específicos de 32 bits ao seu sistema operacional de 64 bits.

user576557
fonte
0

Isso funciona bem para mim, em uma nova instalação onírica. /usr/include/x86_64-linux-gnu/bits/predefs.hé fornecido pelo pacote libc6-dev, talvez isso não esteja instalado corretamente?

Você pode "reinstalar" esse pacote com:

sudo apt-get install --reinstall libc6-dev

No entanto, se esse arquivo estiver presente, parece que o caminho de pesquisa do seu compilador não está no lugar certo para esse arquivo. Você pode verificar executando o seguinte:

gcc --verbose -o hello hello.c

que deve imprimir o caminho de pesquisa para incluir arquivos. O meu diz:

    #include <...> a pesquisa começa aqui:
     /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include
     / usr / local / include
     /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include-fixed
     / usr / include / x86_64-linux-gnu
     / usr / include

Se isso não for o mesmo, eu diria que há uma incompatibilidade de versão entre alguns dos seus pacotes essenciais à construção. Verifique se você possui as versões corretas dos pacotes gcc e libc6-dev. No momento, onírico, estes devem ser:

gcc           4:4.6.1-2ubuntu5
libc6-dev     2.13-20ubuntu5 
Jeremy Kerr
fonte
O resultado da tentativa --verbose é:
hsmyers 25/11
Como respondo a uma resposta? No mínimo, minha versão do GCC é 4.7.0 listada como experimental. Não faço ideia de como foi instalado. Até onde eu sei, o libc6-dev está instalado. Meus caminhos de inclusão são semelhantes a: /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.0/include (também / include-fixed) com o padrão / usr / local / include também. Não consigo encontrar bits como diretório ou bits / predefs.h dentro dele. Vou tentar a reinstalação e ver o que acontece.
hsmyers
Reinstalar não fez diferença. Bits encontrados em / usr / include / i386-linux-gnu / bits, não mostrados como parte dos caminhos de inclusão do GCC. Minha versão do libc6-dev corresponde à sua.
hsmyers
Eu sugiro que a versão experimental (e não padrão do Ubuntu) do gcc seja o seu problema. Eu sugiro remover isso e instalar 4.6.1 do arquivo.
Jeremy Kerr
Praticamente o que eu estava pensando - exceto pelo pequeno problema de não saber a) como chegou lá eb) como removê-lo. O apt-get remove gcc funciona? Ou precisarei do nome completo do pacote? Talvez i686-pc-linux-gnu-4.7.0?
hsmyers
0

Eu tive o mesmo problema com meu compilador avr-gcc.

Vinculei os arquivos e pastas em / usr / include / i386-linux-gnu / a uma pasta na qual o avr-gcc procura por -files. Por exemplo: / usr / lib / avr / include /

ln -s /usr/include/i386-linux-gnu/* /usr/lib/avr/include/

Talvez algo semelhante funcione para o gcc. Para

Benibr
fonte