Dov'è la mia directory / usr / include / sys?


13

Di recente ho aggiornato da Kubuntu 12.04 a 13.04, una reinstallazione completa.

Usare gcc 4.7.3. Ho compilato alcuni programmi per scoprire che non esiste una /usr/include/sysdirectory. Cioè, types.h, stat.h, ecc, sono assenti. Esistono nella include/linuxdirectory ma non include/sys.

Cosa sta succedendo?


Qual è il messaggio di errore che GCC stampa? Si prega di modificare la domanda a fornire questa e altre informazioni relative al tuo problema.
edwin,

1
Hai build essenziale installato?
Seth,

La coppia di programmi che ho provato compila bene quindi non c'è nessun messaggio di errore da gcc. Non riesco proprio a capire da dove provenga l'intestazione. Ho un editor che crea riferimenti a funzioni e syscall e simili e non è contento di non poter trovare la directory.
Anatra

1
Sì, build-essential è aggiornato.
Anatra

Risposte:


13

Se usi Ubuntu a 64 bit (non riesco a scrivere esattamente ora su un sistema a 32 bit), la directory dalla domanda è:

/usr/include/x86_64-linux-gnu/sys

Ora, avendo queste informazioni, puoi creare collegamenti simbolici a quei file se ne hai davvero bisogno in quella posizione ( /usr/include/sys) usando questo su un terminale:

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

Sì, 64 bit. Ho letto qualcosa di simile altrove e sembra che tutto sia in quella directory ma non sono sicuro di come le intestazioni vengano incluse dalla "#include sys / stat.h" alla directory x86_64 / sys. È questa una nuova funzionalità di iniezione gcc confusa? Fuori mano non vedo alcun collegamento simbolico o simili che (esternamente) porterebbe a questo comportamento.
Anatra

Sembra che ci siamo incrociati nel vento. Quindi la linea di fondo è che il compilatore sta facendo un po 'di magia ma potrei aver bisogno di usare alcuni hack di symlink per rendere felice il mio editor?
Anatra

@Duck Ho appena modificato la mia risposta prima di 2 minuti dei tuoi commenti :)
Radu Rădeanu,

5

installa libc6-dev-amd64 se lavori su un Linux a 64 bit. Digita il seguente comando sul terminale Ubuntu:

sudo apt-get install libc6-dev-amd64

1

la directory sys è una directory header di sistema unix / linux con molti comandi di sistema. Diverse marche / versioni di Linux possono metterlo in luoghi diversi. Il seguente comando può aiutarti:

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

Il primo ospita le intestazioni di sistema unix di BSD.
La seconda è una directory contenente testate di sistema Linux a 64 bit.

Riscontro problemi con cmake che non riesce a trovare il file sys / stat.h. La mia soluzione temporanea è quella di creare un collegamento simbolico

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

Non voglio inquinare la directory / usr / include e sto solo creando un collegamento a un particolare file di intestazione e non all'intera directory sys. Penso che questo sia un difetto di cmake, quindi ha un impatto minimo creando un solo link. Spero che questo possa aiutare coloro che soffrono dello stesso problema.


1

Controlliamo qual è il percorso di ricerca include predefinito di gcc. Da questa risposta , otteniamo questo comando:

gcc -xc -E -v -

Alla fine dell'output, vedo questo sul mio computer:

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

Notare la penultima riga. Ciò significa che quando si compila un file C con #include <sys/stat.h>, gcc lo cercherà /usr/include/x86_64-linux-gnu/sys/stat.hprima di provare /usr/include/sys/stat.h, senza che dovessimo ricollegare nulla.


0

Dal momento che la mia architettura è amd64 non c'è libc6-dev-amd64. Il pacchetto da installare è libc6-dev-i386.

Ciò ha corretto la dipendenza per un pacchetto CPAN.


'Dato che la mia architettura è amd64 non esiste libc6-dev-amd64' : cosa intendi?
Marc Vanhoomissen,

Quello che voglio dire è che su architettura x86_64, librerie / kernel / etc. i pacchetti hanno l'architettura amd64. Quindi, libc6-dev-amd64 non è disponibile per l'installazione. Il problema persiste, alcuni software prevedono di vedere / usr / include / sys /.
Jari Turkia,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.