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?


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

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

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.


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.


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.


'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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.