fichiers inclus par defaut

Le
Zeyes
Bonjour,
Je suis en Mandriva 2007
J'ecrit un petit truc en C (un seul fichier) que je compile avec gcc
(sans options, tout bete, quoi)
Dedans y'a:
#include <fcntl.h> (entre autres)
mais j'ai l'impression que le fichier inclu n'est pas
/usr/include/linux/fcntl.h

car:
#ifdef _LINUX_FCNTL_H
#error 1
#endif
ne provoque pas d'erreur
Je remets en question d'ailleurs tous mes #include <>
Comment se fait-il que, par defaut, les fichiers inclus ne soient pas
ceux de /usr/include/linux?
Comment changer ca ?
Un fichier dans /etc ?
Merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Luc.Habert.00__arjf
Le #1883557
Zeyes :

Bonjour,
Je suis en Mandriva 2007
J'ecrit un petit truc en C (un seul fichier) que je compile avec gcc
(sans options, tout bete, quoi)
Dedans y'a:
#include mais j'ai l'impression que le fichier inclu n'est pas
/usr/include/linux/fcntl.h

car:
#ifdef _LINUX_FCNTL_H
#error 1
#endif
ne provoque pas d'erreur


Note au passage : pour voir quel fichier est inclus, tu peux faire un « gcc
-E » dessus.

Je remets en question d'ailleurs tous mes #include <>
Comment se fait-il que, par defaut, les fichiers inclus ne soient pas
ceux de /usr/include/linux?


C'est parfaitement normal. Si tu demandes « fcntl.h », il va le chercher
dans /usr/include. Il faudrait demander « linux/fcntl.h » pour obtenir celui
situé sous le répertoire linux.

Luc.Habert.00__arjf
Le #1883558
Zeyes :

Bonjour,
Je suis en Mandriva 2007
J'ecrit un petit truc en C (un seul fichier) que je compile avec gcc
(sans options, tout bete, quoi)
Dedans y'a:
#include mais j'ai l'impression que le fichier inclu n'est pas
/usr/include/linux/fcntl.h

car:
#ifdef _LINUX_FCNTL_H
#error 1
#endif
ne provoque pas d'erreur


Note au passage : pour voir quel fichier est inclus, tu peux faire un « gcc
-E » dessus.

Je remets en question d'ailleurs tous mes #include <>
Comment se fait-il que, par defaut, les fichiers inclus ne soient pas
ceux de /usr/include/linux?


C'est parfaitement normal. Si tu demandes « fcntl.h », il va le chercher
dans /usr/include. Il faudrait demander « linux/fcntl.h » pour obtenir celui
situé sous le répertoire linux.

Mais a priori, c'est /usr/include/fcntl.h que tu veux inclure. Celui dans
linux ne contient par exemple pas la déclaration de la fonction fcntl.

Zeyes
Le #1883556
Zeyes :

Bonjour,
Je suis en Mandriva 2007
J'ecrit un petit truc en C (un seul fichier) que je compile avec gcc
(sans options, tout bete, quoi)
Dedans y'a:
#include mais j'ai l'impression que le fichier inclu n'est pas
/usr/include/linux/fcntl.h

car:
#ifdef _LINUX_FCNTL_H
#error 1
#endif
ne provoque pas d'erreur


Note au passage : pour voir quel fichier est inclus, tu peux faire un « gcc
-E » dessus.
Merci: oulala


Je remets en question d'ailleurs tous mes #include <>
Comment se fait-il que, par defaut, les fichiers inclus ne soient pas
ceux de /usr/include/linux?


C'est parfaitement normal. Si tu demandes « fcntl.h », il va le chercher
dans /usr/include. Il faudrait demander « linux/fcntl.h » pour obtenir celui
situé sous le répertoire linux.

Mais a priori, c'est /usr/include/fcntl.h que tu veux inclure. Celui dans
linux ne contient par exemple pas la déclaration de la fonction fcntl.
OK, tu as raison, finalement c'est pas ca le probleme


En fait, il me manque des symboles:
F_NOTIFY
et
DN_MODIFY

et d'apres mon chemins d'includes, ils sont definis dans
/usr/include/bits/fcntl.h
mais y'a
#ifdef __USE_GNU
devant!
Il doit me manquer un #include pour ca, parceque si je le definis au
debut de mon source, il est "de-defini" quelquepart dans les includes
Je pense qu'il faut peut-etre un truc plus subtil.


Zeyes
Le #1883545
C'est parfaitement normal. Si tu demandes « fcntl.h », il va le chercher
dans /usr/include. Il faudrait demander « linux/fcntl.h » pour obtenir celui
situé sous le répertoire linux.

En fait, j'ai eu un probleme deja une fois avec les repertoires des

includes par defaut. Il s'agissait de gsm.h (qui est dans
/usr/include/gsm/gsm.h mais le chemin /usr/include/gsm n'etait pas
examine... (j'ai fait un bete lien pour eviter les futurs ennuis), mais
je me demande ou ca se configure....

Luc.Habert.00__arjf
Le #1883544
Zeyes :

En fait, j'ai eu un probleme deja une fois avec les repertoires des
includes par defaut. Il s'agissait de gsm.h (qui est dans
/usr/include/gsm/gsm.h mais le chemin /usr/include/gsm n'etait pas
examine... (j'ai fait un bete lien pour eviter les futurs ennuis), mais


Je t'ai déjà dit qu'il fallait faire

#include
et non pas :

#include
.

je me demande ou ca se configure....


Maintenant, si tu y tiens, tu peux faire un « gcc -dumpsecs » pour récupérer
les specs de ton gcc, le modifier comme qu'il faut (je ne sais pas si il y a
de la doc, mais ça s'intuite pas trop mal), et ensuite utiliser l'option
« -specs » de gcc pour lui faire utiliser ces specs modifiées.

Zeyes
Le #1883543
Zeyes :

En fait, j'ai eu un probleme deja une fois avec les repertoires des
includes par defaut. Il s'agissait de gsm.h (qui est dans
/usr/include/gsm/gsm.h mais le chemin /usr/include/gsm n'etait pas
examine... (j'ai fait un bete lien pour eviter les futurs ennuis), mais


Je t'ai déjà dit qu'il fallait faire

#include
et non pas :

#include

ah mais la c'etait ffmpeg .... pas moi!
avec .configure etc...

je me demande ou ca se configure....


Maintenant, si tu y tiens, tu peux faire un « gcc -dumpsecs » pour récupérer
les specs de ton gcc, le modifier comme qu'il faut (je ne sais pas si il y a
de la doc, mais ça s'intuite pas trop mal), et ensuite utiliser l'option
« -specs » de gcc pour lui faire utiliser ces specs modifiées.


Merci je vais voir... j'aurais pense un /etc
Y'a bien /etc/ld.so.conf pour les libs....


Luc.Habert.00__arjf
Le #1883541
Zeyes :

ah mais la c'etait ffmpeg .... pas moi!
avec .configure etc...


Mouarf. Ce que je fais dans ces cas-là, c'est intercaler au-dessus de gcc un
wrapper qui appelle le vrai gcc en rajoutant des options (-I pour un
répertoire d'include).

Y'a bien /etc/ld.so.conf pour les libs....


Oui et non. Ça défini les répertoires où les libs dynamiques requises par un
programme sont recherchées lorsque le lance. C'est indépendant des
répertoires où le compilateur va chercher les libs lorsqu'il crée le
programme (ça aussi, c'est géré par les specs de gcc, ou par l'option -L).

Zeyes
Le #1883540
Zeyes :

ah mais la c'etait ffmpeg .... pas moi!
avec .configure etc...


Mouarf. Ce que je fais dans ces cas-là, c'est intercaler au-dessus de gcc un
wrapper qui appelle le vrai gcc en rajoutant des options (-I pour un
répertoire d'include).


J'avais essaye de modifier les CFLAGS justement pour ajouter -I
mais j'ai pas reussi a trouver le bon... alors le lien a ete le plus rapide.

Y'a bien /etc/ld.so.conf pour les libs....


Oui et non. Ça défini les répertoires où les libs dynamiques requises par un
programme sont recherchées lorsque le lance. C'est indépendant des
répertoires où le compilateur va chercher les libs lorsqu'il crée le
programme (ça aussi, c'est géré par les specs de gcc, ou par l'option -L).
Sur google, il y a deja eu cette question... sans reponse


Au fait, sinon, il faut definir

-D_GNU_SOURCE

pour avoir __USE_GNU
Marrant: c'est pas par defaut...... et -D__USE_GNU est de-defini, je ne
sais pas ou... (avec d'autres flags, j'ai un warning)


Publicité
Poster une réponse
Anonyme