Onde está o meu diretório / usr / include / sys?

13

Atualizei recentemente do Kubuntu 12.04 para 13.04, uma reinstalação completa.

Usando o gcc 4.7.3. Eu compilei alguns programas para descobrir que não há /usr/include/sysdiretório. Ou seja, types.h, stat.h, etc, estão ausentes. Eles existem no include/linuxdiretório, mas não include/sys.

O que está acontecendo?

Pato
fonte
Qual é a mensagem de erro que o GCC imprime? Por favor editar a pergunta para fornecer esta e outras informações relacionadas ao seu problema.
Edwin
1
Você construiu o essencial instalado?
Seth
Os dois programas que eu tentei compilar bem, portanto não há mensagem de erro do gcc. Eu simplesmente não consigo descobrir de onde vem o cabeçalho. Eu tenho um editor que cria referências a funções e syscall e similares e não fica feliz por não encontrar o diretório.
pato
1
Sim, o build-essential está atualizado.
pato

Respostas:

13

Se você usa o Ubuntu em 64 bits (não posso escrever exatamente 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, é possível criar links simbólicos para esses arquivos se você realmente precisar deles nesse local ( /usr/include/sys) usando isso 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
Radu Rădeanu
fonte
Sim, 64 bits. Li algo semelhante em outro lugar e parece que tudo está nesse diretório, mas não sei como os cabeçalhos estão sendo incluídos do "#include sys / stat.h" para o diretório x86_64 / sys. Isso é algum novo recurso de injeção de gcc fangled? Na mão, não vejo links simbólicos ou similares que (externamente) levem a esse comportamento.
pato
Parece que passamos um pelo outro ao vento. Portanto, o ponto principal é que o compilador está fazendo alguma mágica, mas talvez eu precise usar alguns hacks de link simbólico para deixar meu editor feliz?
pato
@Duck I acabou de editar a minha resposta antes de 2 min de seus comentários :)
Radu Rădeanu
5

instale libc6-dev-amd64 se você estiver trabalhando em um linux de 64 bits. Digite o seguinte comando no terminal ubuntu:

sudo apt-get install libc6-dev-amd64
Nivedita Velagaleti
fonte
1

o diretório sys é um diretório de cabeçalho do sistema unix / linux com muitos comandos do sistema. Diferentes marcas / versões linux podem colocá-lo em lugares diferentes. O seguinte comando pode ajudá-lo:

find /usr/include -type d -name sys
On my ubuntu 16 got the two
/usr/include/bsd/sys
/usr/include/x86_64-linux-gnu/sys

O primeiro é o lar dos cabeçalhos do sistema BSD unix.
O segundo é um diretório que contém cabeças de sistema Linux de 64 bits.

Estou com problemas com o cmake não conseguir encontrar o arquivo sys / stat.h. Minha solução temporária é fazer um link simbólico

/user/local/include/sys/stat.h from /usr/include/x86_64-linux-gnu/sys/stat.h

Não quero poluir o diretório / usr / include e só estou criando um link para um arquivo de cabeçalho específico e não para o diretório sys inteiro. Eu acho que esse é um defeito do cmake, causando um impacto mínimo criando apenas um link. Espero que isso ajude aqueles que sofrem do mesmo problema.

Kemin Zhou
fonte
1

Vamos verificar qual é o caminho de pesquisa padrão do gcc. A partir desta resposta , obtemos este comando:

gcc -xc -E -v -

No final da saída, vejo isso 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 #include <sys/stat.h>, o gcc procurará /usr/include/x86_64-linux-gnu/sys/stat.hantes de tentar /usr/include/sys/stat.h, sem que seja necessário desvincular nada.

legoscia
fonte
0

Como minha arquitetura é amd64, não há libc6-dev-amd64. O pacote para instalar é libc6-dev-i386.

Isso corrigiu a dependência de um pacote CPAN.

Jari Turkia
fonte
'Como minha arquitetura é amd64, não há libc6-dev-amd64' : o que você quer dizer?
Marc Vanhoomissen
O que quero dizer é que, na arquitetura x86_64, libraries / kernel / etc. pacotes possuem arquitetura amd64. Portanto, libc6-dev-amd64 não está disponível para instalação. Ainda que o problema persista, alguns softwares esperam ver / usr / include / sys /.
Jari Turkia