Recentemente atualizei do Kubuntu 12.04 para 13.04, uma reinstalação completa.
Usando gcc 4.7.3. Compilei alguns programas para descobrir que não existe /usr/include/sys
diretório. Ou seja, types.h
, stat.h
, etc, estão ausentes. Eles existem no include/linux
diretório, mas não include/sys
.
O que está acontecendo?
Responder1
Se você usa o Ubuntu em 64 bits (não consigo enviar mensagens de texto exatamente agora em um sistema de 32 bits), o diretório da pergunta é:
/usr/include/x86_64-linux-gnu/sys
Agora, com essas informações, você pode criar links simbólicos para esses arquivos se realmente precisar deles naquele local ( /usr/include/sys
) usando isto em um terminal:
sudo ln -s /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/sys/types.h
sudo ln -s /usr/include/x86_64-linux-gnu/sys/stat.h /usr/include/sys/stat.h
# ...etc
Responder2
instale libc6-dev-amd64 se você estiver trabalhando em um Linux de 64 bits. Digite o seguinte comando no terminal do Ubuntu:
sudo apt-get install libc6-dev-amd64
Responder3
Vamos verificar qual é o caminho de pesquisa de inclusão padrão do gcc. Deesta resposta, obtemos este comando:
gcc -xc -E -v -
No final da saída, vejo isto na minha máquina:
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/4.8/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
Observe a penúltima linha. Isso significa que quando você compila um arquivo C com #include <sys/stat.h>
, o gcc irá procurar /usr/include/x86_64-linux-gnu/sys/stat.h
antes de tentar /usr/include/sys/stat.h
, sem que tenhamos que criar um link simbólico para nada.
Responder4
Como minha arquitetura é amd64, não existe libc6-dev-amd64
. O pacote a ser instalado é o libc6-dev-i386
.
Isso corrigiu a dependência de um pacote CPAN.