Je viens de découvrir que les en-têtes <stdlib.h>
et <stdio.h>
sont situés dans le dossier /usr/include
du serveur Ubuntu, mais je ne trouve pas sys/types.h
.
Et je commence à penser que le compilateur n'utilisera pas réellement le fichier d'en-tête dans le dossier /usr/include
.
Est-ce vrai et où se trouve le fichier?
Ma boîte Debian (et j'espère que Ubuntu ne l’a pas massacrée aussi dans leur zèle) l’a dans /usr/include/sys/types.h
.
Votre meilleur pari est d’exécuter d’abord:
find /usr/include -name types.h
puis:
find / -name types.h
si vous ne le trouvez pas dans le premier.
Cependant, gardez à l'esprit que les éléments de développement peuvent même ne pas être installés . Je souhaiterais créer une image de serveur qui est censé être utilisé en tant que serveur ne me surprends pas si le compilateur et un tas d'autres choses ne font pas partie de l'installation par défaut (mais il y aurait beaucoup d'éléments de serveur comme ftpd
ou Apache
et ainsi de suite).
Si le compilateur le localise quelque part et que vous ne savez pas où, vous pouvez utiliser quelque chose comme:
echo "#include <sys/types.h>" | gcc -E -x c - | grep /types.h
pour savoir d'où ça vient.
Ou:
echo "#include <stdio.h>" | gcc -E -x c - | grep /stdio.h
pour l'autre en-tête, vous êtes inquiet.
De plus: cette ligne de commande
gcc
s’arrête après la phase de pré-traitement (-E
), oblige le fichier à être traité en tant que code source C (-x c
) et récupère le programme à partir de l’entrée standard (-
), dans ce cas, à partir de l'instructionecho
.
La dernière grep
supprime simplement les lignes sans importance.
Le fichier sys/types.h
est situé à la /usr/include/sys/types.h
si vous obtenez ce genre de Fatal Error :
.../linux/linux_types.h:146:38: fatal error: /usr/include/sys/types.h: No
such file or directory
Fix en utilisant le code suivant:
Sudo apt-get install build-essential flex libelf-dev libc6-dev-AMD64 binutils-dev libdwarf-dev
Si vous avez la commande de localisation disponible, vous pouvez simplement utiliser locate
:
-bash-3.2$ locate sys/types.h
/usr/include/sys/types.h
/usr/lib/syslinux/com32/include/sys/types.h
-bash-3.2$
C'est le moyen le plus simple et le plus rapide de le faire.
Juste pour référence future, j’ai rencontré ce problème sur ma machine Debian, et il s’est avéré que dans mon cas
$ apt-file find /usr/include/sys/types.h
libc6-dev-i386: /usr/include/sys/types.h
libc6-dev-i386 est le paquet que j'ai apparemment besoin d'installer
Sous Linux, types.h
devrait être dans /usr/include/sys/types.h
.
Dans mon Slackware, j'avais besoin d'installer glibc pour résoudre ce problème.