web-dev-qa-db-fra.com

Où se trouve sys/types.h?

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? 

20
mko

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'instruction echo.

La dernière grep supprime simplement les lignes sans importance.

49
paxdiablo

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
14
rascaL raajA

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.

6
Dmitry Zagorulkin

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

4
LaPingvino

Sous Linux, types.h devrait être dans /usr/include/sys/types.h.

2
wallyk

Dans mon Slackware, j'avais besoin d'installer glibc pour résoudre ce problème.

0