Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

fichiers inclus par defaut

8 réponses
Avatar
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

8 réponses

Avatar
Luc.Habert.00__arjf
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


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.

Avatar
Luc.Habert.00__arjf
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


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.

Avatar
Zeyes
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


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.


Avatar
Zeyes
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....

Avatar
Luc.Habert.00__arjf
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<gsm/gsm.h>

et non pas :

#include<gsm.h>

.

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.

Avatar
Zeyes
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<gsm/gsm.h>

et non pas :

#include<gsm.h>


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


Avatar
Luc.Habert.00__arjf
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).

Avatar
Zeyes
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)