PpHd Le 22/12/2009 à 12:14 Systeme:
Linux + gcc (Surement valable sur tout unix)
Etat:
J'ai deux fichiers include :
/usr/include/toto.h
et
/usr/local/include/toto.h
But:
Faire qu'un fichier t.c contenant #include "toto.h" inclut la version de /usr/include et pas celle de /usr/local/include.
J'ai essayé avec
gcc -I/usr/include t.c -E
gcc -I/usr/local/../include t.c -E
rien n'y fait. J'inclus toujours celle de /usr/local/include.
Question:
Comment faire ?
PpHd Le 22/12/2009 à 14:01 Je n'aime pas du tout cette solution car elle oblige à connaître tous les répertoires systèmes d'une machine, et je suis sûr d'en oublier avec la libc + gcc (il y en a partout !)
J'ai la solution de recopier les .h que l'on désire en local et de faire de ce répertoire local un répertoire d'include.
Mais c'est moche !
#include "/usr/include/toto.h" ?

Proud to be CAKE©®™
GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.
PpHd Le 22/12/2009 à 14:21 Oui, certes. Mais sans toucher le code source si possible.
Et sans avoir les droits root.
Et je n'ai aucune variable d'environnement.
Le problème est de fournir à l'utilisateur la possibilité de spécifier où se trouve sa lib.
Le problème est que s'il spécifie /usr alors ca ne fait rien puisqu'il prend /usr/local/ en priorité.
Ca parlait que si /usr/local/include est prioritaire pour les include, /usr/local/lib n'est pas prioritaire pour les librairies (/usr/lib est toujours prioritaire). Bonjour le sac de noeuds...
Nil Le 22/12/2009 à 15:00 Il y a quelque chose que je ne comprends pas... si les deux toto.h ne sont pas compatibles l'une/l'autre (que ça soit pour des problèmes de version ou parce que les deux font des choses totalement différentes), pourquoi ont-elles le même nom ?
Et s'il s'agit de deux versions différente, il me semblait que, dans le monde Linux, le fichier avait un nom avec un n° de version, et que le nom générique n'était qu'un lien symbolique vers le fichier qu'on voulait... non ? et dans ce cas-là, on pourrait faite un include sur toto2.45.h directement si c'est cette version qu'on veut spécifiquement...
Nil Le 22/12/2009 à 18:41 Ok... c'est un peu dommage, non ?
En meme temps utiliser deux version différentes et incompatible de la meme lib dans un meme programme ? c'est pas un peu pas normal?

Proud to be CAKE©®™
GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.
Nil Le 22/12/2009 à 21:46 (Il ne l'utilise pas dans le même programme, il a les deux sur un même système, à deux endroits différents)
gcc -isystem /usr/include t.c -E
Pour savoir c'est quel distrib que tu utilise ?
Car il ne devrais pas mettre un repertoire non-system dans la liste par defaut.
Peace Unity Love et Having Fun!!!
PpHd Le 07/01/2010 à 19:10 debian, mais c'est vrai sur tout linux, bsd, unix.
/usr/local/include est un répertoire système; et il est prioritaire sur /usr/include.
C'est surement propre a FreeBSD (et je pense a Open et Net aussi) vu que /usr/local/ est fait juste pour les ports/packages.
En tout cas c'est clairement moche de faire de /usr/local/include un repoertoire d'include par defaut ...
Peace Unity Love et Having Fun!!!