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?
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
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
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.
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.
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.