Bonjour,
Ma question me semble simple, mais je n'ai pas trouvé de réponse dans mon moteur de recherche préféré, alors je tente ma chance ici.
Je souhaite compiler la version CVS de la bibliothèque TotoLib dépendant de TotoBase. Je veux installer ça dans /home/moi/toto/lib et /home/moi/toto/includes.
Le hic, c'est que je ne suis pas administrateur de la machine, et qu'elle contient la version 1.0 de TotoLib et TotoBase, installés dans /usr/lib et /usr/includes.
Je peux compiler TotoBase, l'installer dans mon homedir, mais quand j'installe TotoLib, lors de l'inclusion de headers de TotoBase (genre #include ), il charge celui de la version 1.0 qui est sur le système (/usr/includes), alors que je voudrais qu'il utilise celle de mon homedir.
À noter que j'ai bien préalablement fait un petit
export CPPFLAGS=-I/home/moi/toto/includes
Rien à faire, g++ semble se servir en priorité dans /usr/includes qui contient une ancienne version, et du coup, ne peux pas compiler (error: ISO C++ forbids declaration of 'MaClasseNouvellementDefinie’ with no
type).
Est-il possible de l'obliger à n'utiliser que les headers situés dans un répertoire spécifié ?
De même pour les shared objects, mon binaire ainsi compilé va-t-il pouvoir être lié aux so locaux (de mon homedir) ?
Merci de vos lumières !
# Options g++
Posté par GaLi . Évalué à 4.
Les options suivantes te seront surement utiles :
-nostdinc++
Do not search for header files in the standard directories specific to C++, but do still search the other standard directories.
-nodefaultlibs
Do not use the standard system libraries when linking.
-nostdlib
Do not use the standard system startup files or libraries when linking.
Après, cela dépend de ton code mais la dernière option ne devrait pas être nécessaire.
[^] # Re: Options g++
Posté par Thomas Bigot . Évalué à 1.
Merci !
# doc gcc
Posté par frederic blain . Évalué à 3.
Concernant les headers :
Attention sur la façon dont est faite l'inclusion des headers de TotoBase ?
/* Sous la forme d'en tête standard */
#include <toto.h>
/* ou bien sous la forme d'en tête locale */
#include "toto.h"
En fonction de ca, tu peux utiliser les options de la ligne de commande "-I" et "-I-"
-I: Add the directory dir to the head of the list of directories ...
-I-: If additional directories are specified with -I options after the -I-, these directories are searched for all #include directives
Concernant les libs :
Ce n'est pas explicité dans le lien ci dessus, mais il semblerait que -L ajoute également les repertoires en tête de liste.
[^] # Re: doc gcc
Posté par Thomas Bigot . Évalué à 1.
Je n’ai malheureusement pas le choix : ni TotoLib ni TotoBase ne sont écrites par moi, et je ne peux pas modifier les sources qui doivent être recompilables assez rapidement après une mise à jour CVS.
>>> -I: Add the directory dir to the head of the list of directories
Et pourtant quand j'ajoute des répertoires d'inclusion avec -I, c'est les headers du système (/usr/include) qui sont chargés.
J’ai beau relire, j'ai du mal à comprendre le fonctionnement du -I-.
Dans tous les cas merci beaucoup pour l'aide, je vais potasser tout ça.
[^] # Re: doc gcc
Posté par Thomas Bigot . Évalué à 2.
Est-ce que la bonne méthode est de spécifier ces options comme cela :
export CPPFLAGS="-I/home/moi/toto/include"
[^] # Re: doc gcc
Posté par __o . Évalué à 4.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.