IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Compilation et #pragma comment(lib,"malib.lib") ?


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 48
    Points : 46
    Points
    46
    Par défaut Compilation et #pragma comment(lib,"malib.lib") ?
    Bonjour à tous,

    Imaginons que je dispose d'une librairie c'est à dire du fichier header "librairie.h" et du "librairie.o" issu de la compilation de "librairie.cpp" contenant l'implémentation à proprement parler. Supposons aussi que la librairie ainsi créée fournisse une fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void librairie_func(void);
    Je crée maintenant le fichier "main.cpp" suivant que je compile et lie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include "librairie.h"
    #pragma comment(lib, "librairie.o")
     
    int main(int argcp, char **argv)
    {
       librairie_func();
     
       return 0;
    }
    J'aimerais savoir si la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #pragma comment(lib,"librairie.o")
    est valable (y a-t-il une différence entre un .o et un .lib ?) et si le cas échéant elle permet de s'affranchir au moment du linkage de rajouter le fichier objet "librairie.o" (j'avais cru comprendre que cette ligne indiquait au linker de lier automatiquement ce fichier au projet...) ?... Manifestement la réponse à ma question doit être non (j'ai évidemment essayé et au moment du linkage les fonctions de la librairie sont non reconnues) mais à quoi sert alors la fameuse ligne citéé auparavant ?

    Merci pour votre aide.

    PS : je code sous Windows avec g++.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    Déjà, la dernière fois que j'ai utilisé #pragma comment avec GGC, il m'a dit "unknown pragma"

    Ensuite, un .o est très différent d'un .lib, j'ai bien peur que ce ne soit carrément pas le même format.
    Tu aurais sans doute plus de chances entre un .obj et un .lib ou entre un .o et un .a

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Bonsoir,

    Il me semble que cette instruction n'est pas standard. .. Il me semble meme qu'elle est ignoré par certains compilateurs...


    #pragma comment(lib, "MaLib.lib")
    "MaLib.lib" doit soit se trouver dans le repertoire de l'executable ou alors elle doit se situer dans un des repertoires définit par la variable PATH. Auquel cas tu dois fournir le chemin absolu.

    #pragma comment(lib, "C:\MonRepertoire\MaLib.lib")

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 48
    Points : 46
    Points
    46
    Par défaut
    merci pour vos réponses... j'ai bien peur, après consultations de plusieurs sources, que le #pragma ne soit pas un standard ANSI et qu il ne soit pas pris en charge par gcc... le compilateur ignore l'instruction ! En fait ayant créé une librairie qui faisait appel à plusieurs autres librairies (elles aussi créées par mes soins) je voulais m'éviter la réécriture, au linkage et lors d'une utilisation de la librairie, du nom de toutes les librairies associées (en ligne de commande !) ... Mais bon je ferai avec !

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    Euh... Il me semble que les chemins de librairies ne dépendent aucunement de PATH, mais plutôt de LIB, non?

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Citation Envoyé par Médinoc
    Euh... Il me semble que les chemins de librairies ne dépendent aucunement de PATH, mais plutôt de LIB, non?
    Je comprends pas ce que tu veux dire.

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    Je veux dire que les chemins de recherche de librairies pour le compilateur ne sont pas dans la variable d'environnement PATH, mais dans la variable d'environnement LIB.

    De même, les fichiers d'en-tête sont recherchés dans les répertoires spécifiés dans la variable d'environnement INCLUDE

    En fait, la variable PATH ne sert à rien au compilateur (mais elle sert à l'utilisateur pour appeler le compilo sans avoir à connaitre taper son chemin absolu)

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    A priori #pragma comment ne fonctionne qu'avec Visual C++ (les #pragma sont spécifiques à chaque compilo, mais ceux non reconnus ne génèrent pas d'erreur).

    Donc la meilleure solution sera encore d'ajouter ton fichier .o à l'éditeur de lien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. bug sur msvc 2010 : pragma comment(lib
    Par yann458 dans le forum Visual C++
    Réponses: 2
    Dernier message: 12/12/2012, 02h46
  2. Comment linker avec odbc32.lib dans le code ? (avec gcc)
    Par _Audrey_ dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 06/11/2008, 18h40
  3. comment exporter namespace dans lib, dll ?
    Par lucky dans le forum MFC
    Réponses: 2
    Dernier message: 23/06/2006, 17h30
  4. Réponses: 11
    Dernier message: 13/03/2006, 18h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo