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

Visual C++ Discussion :

[Visual C++ 2010] Problème pour linker une librairie


Sujet :

Visual C++

Vue hybride

CleeM [Visual C++ 2010] Problème... 28/08/2012, 17h13
djuju Visiblement ta compilation se... 29/08/2012, 00h24
CleeM Salut et merci pour ta... 29/08/2012, 11h03
CleeM Je reviens à la charge, En... 29/08/2012, 11h59
djuju Tes DLL doivent être avec tes... 29/08/2012, 14h03
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 204
    Par défaut [Visual C++ 2010] Problème pour linker une librairie
    Bonjour à tous,

    Je ne maîtrise pas encore très bien l'ajout de librairies à un projet et je n'arrive pas à linker la librairie de PostgreSQL.
    J'ai procédé de cette façon :

    - Projet > Propriétés > Editeur de liens > Général : Ici, je mets le PATH qui mène au fichier libpq.lib;
    - Projet > Propriétés > Editeur de liens > Entrée : Ici, je mets le nom de la librairie : libpq.lib;
    - Explorateur de solutions > Clic droit sur le projet > Ajouter un élément existant > libpq.lib;

    Je ne sais pas si la 3ème étape est nécessaire, mais je m'y était pris exactement de cette façon pour la librairie MySQL (libmysql.lib) et sa fonctionnait.

    Pour info je développe un programme qui communique avec plusieurs SGBD, et je n'ai pas du tout la main sur le serveur de l'utilisateur (car j'ai bien essayé de mettre - en mode violent - la librairie dans le PATH Windows, mais sa ne me satisfait pas comme solution, en plus d'être problématique pour mon projet).

    Quant au message d'erreur il est clair :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    libpq.dll: Le module spécifié est introuvable.
    pq.dll: Le module spécifié est introuvable.
    Merci d'avance!

  2. #2
    Membre émérite
    Homme Profil pro
    R&D imagerie 3D / prog embarquée
    Inscrit en
    Mars 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : R&D imagerie 3D / prog embarquée
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2007
    Messages : 419
    Par défaut
    Visiblement ta compilation se passe bien, mais c'est au démarrage du code que ça plante, non ?

    J'ai cette impression à cause des messages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    libpq.dll: Le module spécifié est introuvable.
    pq.dll: Le module spécifié est introuvable.
    Tu ne devrais pas en arrivé là avant l'exec.

    Si c'est le cas, c'est tout simplement que tes 2 DLLs ne sont pas accessibles.
    Il faut soit que tu les enregistre dans windows, soit que tu en mette une copie dans ton dossier d’exécution.

    A+
    Ju

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 204
    Par défaut
    Salut et merci pour ta réponse Djuju,

    En effet, il fallait bien que j'ajoute les dll dans le dossier de mon projet, c'est donc cette étape que j'avais zappée!
    Je vais noter sa quelque part pour pas oublier.

    Par contre, dernière petite question, pour PostgreSQL par exemple, je dois ajouter au total 5 dll pour que mon projet communique avec une base de données, ce qui peut être un peu lourd je trouve (surtout si je dois gérer d'autres SGBD qui demandent à leur tour des dll).

    Quand tu dis les ajouter dans Windows, si je n'ai pas la main sur le serveur de l'utilisateur, il m'est impossible de le faire. Donc existe-t-il un autre moyen de procéder?

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 204
    Par défaut
    Je reviens à la charge,

    En fait mon soucis est toujours là.
    Lors de l'exécution, un message d'erreur Windows s'affiche : Impossible de démarrer le programme car il manque XX.dll sur votre ordinateur.

    Pour résumer, j'ai essayé de :

    - Linker la librairie à mon projet (Editeur de liens > entrée > dépendances supplémentaires);
    - Ajouter le .lib à mon projet (Ajouter élément existant);
    - Ajouter le .dll à mon projet (Ajouter élément existant);
    - Placer le .dll dans le dossier de mon projet (à côté des fichiers .cpp et .h);

    Rien n'y fait.
    Je précise que j'utilise une VM pour émuler le serveur de l'utilisateur (donc j'ai sur cette VM uniquement les SGBD d'installés). Et je souhaite pouvoir démarrer mon programme sans avoir besoin d'installer ces dll sur ma VM (il faudrait donc qu'elles soient liées à mon projet).

    Bizarrement, je ne trouve aucun tuto sur internet quant aux étapes à suivre pour faire ceci! :/

    Merci d'avance!

  5. #5
    Membre émérite
    Homme Profil pro
    R&D imagerie 3D / prog embarquée
    Inscrit en
    Mars 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : R&D imagerie 3D / prog embarquée
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2007
    Messages : 419
    Par défaut
    Tes DLL doivent être avec tes exe, pas avec les sources. Typiquement, c'est le dossier debug et release.

    Si j'ai bien compris, tes DLL sont les librairies de connexion a ton serveur, donc elles n'ont pas besoin d'être sur le serveur.

    Si tu ne veux pas trainer tes DLL avec ton exe, il faut que tu utilise une lib static. Le code contenu dans tes DLL sera alors lié a ton exe et tu te débarrassé de fameuses DLL.
    Ceci dit, la taille de ton exe va gonfler et les static lib doivent être disponibles ou compilables a partir des sources.

    D'une façon généralement c'est très acceptable des trainer des DLL avec ton code. Si elles sont utiliser par plusieurs appli, c'est préférable de les enregistrer dans windows. Ça évite d'en avoir plusieurs copies, alors qu'une est suffisante.

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 204
    Par défaut
    Ok je te remercie,

    Donc les librairies statiques!
    J'utilise une API qui me permet de me connecter aux SGBD (cette API se sert ensuite des librairies de chaque SGBD).
    Dans la release de cette API, j'ai bien une librairie statique, mais lorsque je la link au projet et que je compile, j'ai pas mal d'erreurs de liens. Exemples :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    error LNK2001: symbole externe non résolu ___mb_cur_max
    error LNK2001: symbole externe non résolu "public: int __thiscall SAString::Insert(int,char const *)" (?Insert@SAString@@QAEHHPBD@Z)
    Etc, etc, j'en ai pas mal.
    La release de l'API est aussi accompagnée de fichiers .pdb (je pense que sa doit être sa qui permet d'éviter les erreurs de symboles). Par contre, je ne sais pas comment lier un fichier .pdb à mon projet (j'ai fouillé dans les propriétés du projet, je n'ai rien trouvé de concret).

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

Discussions similaires

  1. Linker une librairie visual avec g++ sous windows 7 64
    Par falcoman33 dans le forum C++/CLI
    Réponses: 11
    Dernier message: 06/05/2014, 07h01
  2. [Visual C# 2010] Regex pour recuperer une balise
    Par poupou63 dans le forum C#
    Réponses: 1
    Dernier message: 26/07/2011, 15h39
  3. Réponses: 1
    Dernier message: 20/12/2010, 22h43
  4. Problème pour linker la lib d'une Dll
    Par damien99 dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 23/02/2006, 23h20
  5. Problème pour lier une librairie... (ANTLR)
    Par loupdeau dans le forum MFC
    Réponses: 4
    Dernier message: 03/06/2005, 10h12

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