web-dev-qa-db-fra.com

Où se trouve mon répertoire / usr / include / sys?

Je suis récemment passé de Kubuntu 12.04 à 13.04, une réinstallation complète.

Utiliser gcc 4.7.3. J'ai compilé des programmes pour découvrir qu'il n'y a pas de répertoire /usr/include/sys. Autrement dit, types.h, stat.h, etc., sont absents. Ils existent dans le répertoire include/linux mais pas include/sys.

Que se passe-t-il?

11
Duck

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

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

Maintenant, ayant cette information, 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
11
Radu Rădeanu

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
5
Nivedita Velagaleti

Voyons quel est le chemin de recherche par défaut de gcc. De cette réponse , on obtient cette commande:

gcc -xc -E -v -

À la fin de la sortie, je vois ceci 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.h avant d'essayer /usr/include/sys/stat.h, sans que nous ayons à établir de lien symbolique.

1
legoscia

Depuis que mon architecture est AMD64, il n'y a pas libc6-dev-AMD64. Le paquet à installer est libc6-dev-i386.

Cela corrigeait la dépendance pour un paquet CPAN.

0
Jari Turkia

le répertoire sys est un répertoire d’en-tête système unix/linux contenant de nombreuses commandes système. Différentes marques/versions linux peuvent le placer à 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 contient les en-têtes système BSD Unix.
Le second est un répertoire contenant les têtes de système Linux 64 bits.

Je rencontre des problèmes avec le fait que cmake ne puisse 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 ne fais qu'un lien vers un fichier d'en-tête particulier et non vers le répertoire sys complet. Je pense que c’est un défaut de cmake, donc 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.

0
Kemin Zhou