Où est mon répertoire / usr / include / sys?


13

J'ai récemment mis à niveau Kubuntu 12.04 vers 13.04, une réinstallation complète.

Utilisation de gcc 4.7.3. J'ai compilé quelques programmes pour découvrir qu'il n'y a pas de /usr/include/sysrépertoire. C'est types.h, stat.h, etc, sont absents. Ils existent dans le include/linuxrépertoire mais pas include/sys.

Que se passe-t-il?


Quel est le message d'erreur que GCC imprime? Veuillez modifier la question pour fournir ces informations et d'autres informations liées à votre problème.
edwin

1
Avez-vous installé la version essentielle?
Seth

Les quelques programmes que j'ai essayés se compilent bien donc il n'y a pas de message d'erreur de gcc. Je n'arrive pas à comprendre d'où vient l'en-tête. J'ai un éditeur qui construit des références aux fonctions et à syscall et similaires et il n'est pas content qu'il ne trouve pas le répertoire.
Duck

1
Oui, build-essential est à jour.
Duck

Réponses:


13

Si vous utilisez Ubuntu sur 64 bits (je ne peux pas envoyer de texte exactement en ce moment sur un système 32 bits), le répertoire de la question est:

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

Maintenant, avec ces informations, vous pouvez créer des liens symboliques vers ces fichiers si vous en avez vraiment besoin à cet emplacement ( /usr/include/sys) en utilisant ceci sur un 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

Oui, 64 bits. J'ai lu quelque chose de similaire ailleurs et il semble que tout se trouve dans ce répertoire mais je ne sais pas comment les en-têtes sont inclus du "#include sys / stat.h" au répertoire x86_64 / sys. Est-ce une nouvelle fonctionnalité d'injection gcc fangled? Off-hand, je ne vois aucun lien symbolique ou similaire qui (à l'extérieur) conduirait à ce comportement.
Duck

On dirait que nous nous sommes croisés dans le vent. Donc, l'essentiel est que le compilateur fait de la magie mais je devrai peut-être utiliser des hacks de lien symbolique pour rendre mon éditeur heureux?
Duck

@Duck Je viens de modifier ma réponse avant 2 min de vos commentaires :)
Radu Rădeanu

5

installez libc6-dev-amd64 si vous travaillez sur un linux 64 bits. Tapez la commande suivante sur le terminal ubuntu:

sudo apt-get install libc6-dev-amd64

1

le répertoire sys est un répertoire d'en-tête système unix / linux avec de nombreuses commandes système. Différentes marques / versions Linux peuvent le mettre à différents endroits. La commande suivante peut vous aider:

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

Le premier héberge les en-têtes du système BSD unix.
Le second est un répertoire contenant des têtes système Linux 64 bits.

Je rencontre des problèmes avec cmake ne pouvant pas trouver le fichier sys / stat.h. Ma solution temporaire est de faire un lien symbolique

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

Je ne veux pas polluer le répertoire / usr / include, et je crée uniquement un lien vers un fichier d'en-tête particulier et non vers le répertoire sys entier. Je pense que c'est un défaut de cmake, donc avoir un impact minimal en ne faisant qu'un seul lien. J'espère que cela pourra aider ceux qui souffrent du même problème.


1

Vérifions quel est le chemin de recherche par défaut de gcc. De cette réponse , nous obtenons cette commande:

gcc -xc -E -v -

À la fin de la sortie, je vois cela sur ma machine:

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

Remarquez l'avant-dernière ligne. Cela signifie que lorsque vous compilez un fichier C avec #include <sys/stat.h>, gcc recherchera /usr/include/x86_64-linux-gnu/sys/stat.havant d'essayer /usr/include/sys/stat.h, sans que nous ayons à créer de lien symbolique.


0

Puisque mon architecture est amd64, il n'y en a pas libc6-dev-amd64. Le package à installer est libc6-dev-i386.

Cela a corrigé la dépendance pour un package CPAN.


«Puisque mon architecture est amd64, il n'y a pas de libc6-dev-amd64» : que voulez-vous dire?
Marc Vanhoomissen

Ce que je veux dire, c'est que sur l'architecture x86_64, les bibliothèques / noyau / etc. les packages ont une architecture amd64. Ainsi, libc6-dev-amd64 n'est pas disponible pour l'installation. Le problème persiste, certains logiciels s'attendent à voir / usr / include / sys /.
Jari Turkia
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.