Wo ist mein Verzeichnis / usr / include / sys?


12

Ich habe kürzlich ein Upgrade von Kubuntu 12.04 auf 13.04 durchgeführt, eine vollständige Neuinstallation.

Verwenden von gcc 4.7.3. Ich habe einige Programme zusammengestellt, um festzustellen, dass es kein /usr/include/sysVerzeichnis gibt. Das heißt, types.h, stat.h, usw., sind nicht vorhanden. Sie existieren im include/linuxVerzeichnis, aber nicht include/sys.

Was ist los?


Was ist die Fehlermeldung, die GCC druckt? Bitte bearbeiten Sie die Frage, um diese und andere Informationen zu Ihrem Problem bereitzustellen.
Edwin

1
Haben Sie Build Essential installiert?
Seth

Die paar Programme, die ich versucht habe, kompilieren gut, so dass es keine Fehlermeldung von gcc gibt. Ich kann einfach nicht herausfinden, woher der Header kommt. Ich habe einen Editor, der Verweise auf Funktionen und Syscall und dergleichen erstellt, und es ist nicht glücklich, dass er das Verzeichnis nicht finden kann.
Ente

1
Ja, Build-Essential ist auf dem neuesten Stand.
Ente

Antworten:


12

Wenn Sie Ubuntu auf 64-Bit verwenden (auf einem 32-Bit-System kann ich momentan keinen genauen Text schreiben), lautet das Verzeichnis aus der Frage:

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

Mit diesen Informationen können Sie nun symbolische Links zu diesen Dateien erstellen, wenn Sie sie an diesem Speicherort ( /usr/include/sys) wirklich benötigen. Verwenden Sie dazu diese Informationen auf einem 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

Ja, 64 Bit. Ich habe an anderer Stelle etwas Ähnliches gelesen und es scheint, als ob sich alles in diesem Verzeichnis befindet, aber ich bin nicht sicher, wie die Header vom Verzeichnis "#include sys / stat.h" in das Verzeichnis x86_64 / sys aufgenommen werden. Ist dies eine neue Funktion für die gcc-Injektion mit Reißzähnen? Nebenbei sehe ich keine Symlinks oder ähnliches, die (extern) zu diesem Verhalten führen würden.
Ente

Sieht so aus, als wären wir uns im Wind begegnet. Unter dem Strich macht der Compiler also etwas Magie, aber ich muss möglicherweise einige Symlink-Hacks verwenden, um meinen Editor glücklich zu machen?
Ente

@ Ente Ich habe gerade meine Antwort vor 2 Minuten Ihrer Kommentare bearbeitet :)
Radu Rădeanu

5

Installieren Sie libc6-dev-amd64, wenn Sie unter einem 64-Bit-Linux arbeiten. Geben Sie den folgenden Befehl auf dem Ubuntu-Terminal ein:

sudo apt-get install libc6-dev-amd64

1

Das sys-Verzeichnis ist ein Unix / Linux-Systemheaderverzeichnis mit vielen Systembefehlen. Verschiedene Marken / Versionen von Linux können es an verschiedenen Orten platzieren. Der folgende Befehl kann Ihnen helfen:

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

Der erste beherbergt BSD-Unix-System-Header.
Das zweite ist ein Verzeichnis mit Linux 64-Bit-Systemköpfen.

Ich habe Probleme damit, dass cmake die Datei sys / stat.h nicht finden kann. Meine vorübergehende Lösung besteht darin, eine symbolische Verbindung herzustellen

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

Ich möchte das Verzeichnis / usr / include nicht verschmutzen und erstelle nur einen Link zu einer bestimmten Header-Datei und nicht zum gesamten sys-Verzeichnis. Ich denke, dies ist ein Defekt von cmake, so dass nur minimale Auswirkungen auftreten, wenn nur ein Link erstellt wird. Hoffe, dies kann denen helfen, die unter dem gleichen Problem leiden.


1

Lassen Sie uns überprüfen, wie der Standard-Suchpfad für gcc lautet. Aus dieser Antwort erhalten wir diesen Befehl:

gcc -xc -E -v -

Am Ende der Ausgabe sehe ich dies auf meinem 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

Beachten Sie die vorletzte Zeile. Das bedeutet, dass #include <sys/stat.h>gcc beim Kompilieren einer C-Datei mit gcc sucht, /usr/include/x86_64-linux-gnu/sys/stat.hbevor Sie es versuchen /usr/include/sys/stat.h, ohne dass wir irgendetwas verknüpfen müssen.


0

Da meine Architektur amd64 ist, gibt es keine libc6-dev-amd64 . Das zu installierende Paket ist libc6-dev-i386.

Damit wurde die Abhängigkeit für ein CPAN-Paket behoben.


'Da meine Architektur amd64 ist, gibt es kein libc6-dev-amd64' : Was meinst du?
Marc Vanhoomissen

Was ich meine ist, dass auf x86_64 Architektur, Bibliotheken / Kernel / etc. Pakete haben eine amd64-Architektur. Daher kann libc6-dev-amd64 nicht installiert werden. Das Problem besteht weiterhin, einige Softwareprogramme erwarten / usr / include / sys /.
Jari Turkia
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.