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

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

  7. #7
    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
    Les pdb sont seulement les fichier de symboles pour le debug de ta lib.

    Par contre, j'avais oubli� un d�tail important si tu utilise des lib statiques: c'est � toi de faire l'�dition des liens de ta static lib avec ses d�pendances.
    Autrement dit, si ta static lib utilise d'autres libs (on dit qu'elle a des d�pendance vers d'autres libs), c'est � toi d'ajouter ces d�pendance dans les options du linker de ton projet. C'est bien sur un peu plus lourd � mettre en place

  8. #8
    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
    Encore merci pour ton aide.

    Cependant, je n'arrive pas � passer outre ces 10 messages d'erreurs concernant des "externes non r�solus".

    Lorsque je passe de la librairie dynamique � statique, je gagne 7 nouvelles erreurs :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    1>sqlapis.lib(SQLAPI.obj) : error LNK2001: symbole externe non résolu ___mb_cur_max
    1>sqlapis.lib(oraClient.obj) : error LNK2001: symbole externe non résolu ___mb_cur_max
    1>sqlapis.lib(ISAClient.obj) : error LNK2001: symbole externe non résolu ___mb_cur_max
    1>sqlapis.lib(ssOleDbClient.obj) : error LNK2001: symbole externe non résolu ___mb_cur_max
    1>sqlapis.lib(samisc.obj) : error LNK2001: symbole externe non résolu _GetFileVersionInfoA@16
    1>sqlapis.lib(samisc.obj) : error LNK2001: symbole externe non résolu _GetFileVersionInfoSizeA@8
    1>sqlapis.lib(samisc.obj) : error LNK2001: symbole externe non résolu _VerQueryValueA@16
    Et depuis que j'ai remplac� la librairie dynamique par la librairie statique, j'ai 3 nouvelles erreurs (dont je n'arrive pas � me d�barrasser, m�me en revenant � la librairie dynamique) :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    1>SaveSQL.obj : error LNK2001: symbole externe non résolu "public: int __thiscall SAString::Insert(int,char const *)" (?Insert@SAString@@QAEHHPBD@Z)
    1>SaveSQL.obj : error LNK2001: symbole externe non résolu "public: int __thiscall SAString::Replace(char const *,char const *)" (?Replace@SAString@@QAEHPBD0@Z)
    1>SaveSQL.obj : error LNK2001: symbole externe non résolu "public: int __thiscall SAString::GetLength(void)const " (?GetLength@SAString@@QBEHXZ)
    J'imagine bien qu'en ne connaissant pas l'API, et n'�tant pas devant, sa ne doit pas �tre �vident de savoir qu'est-ce qui ne va pas, mais si tu as une id�e, je bloque l�. :/

  9. #9
    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
    Ok, j'ai pas �t� clair.

    Le compilateur �choue car car il ne trouve pas un paquet de fonctions (celles list� en erreur).
    Ces fonctions sont n�cessaires pour utiliser la lib de PostgreSQL.
    Une DLL est un code compil� dont l'�dition de liens a �t� faite. Donc, pas besoin de donn� acc�s au lib qui contienne ces fonctions puisqu�elles ont �t� embarqu�es dans ta DLL.
    Une static lib est un code compil�, mais dont l'�dition de liens n'a pas �t� faite. Donc d�s qu'une fonction de ta static lib fait appel a une fonction externe (une fonction qui se trouve dans une autre lib), tu dois fournir le code qui correspond � cette fonction. Sinon l'�dition de liens va �chouer.

    D'ailleurs tu remarquera que toutes tes erreur sont de type LNK, soit des erreur d'�dition de lien et non de compilation.

    Un certain nombre de lib n�c�ssaires � l'utilisation de la lib statique de PostgreSQL ne sont donc pas incluses dans ton projet.

  10. #10
    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 Djuju,

    Merci pour tes explications, c'est beaucoup plus clair maintenant pour moi.
    J'ai r�solu mes probl�mes, en fait mes librairies �taient bien link�es (apr�s tes premi�res explications), mais le soucis venait d'une option de compilateur VisualStudio : G�n�ration de Code / Biblioth�que Runtime, qui �tait positionn�e sur DLL Multithread (/MD) et que j'ai pass� en Multithread (/MT).

    Il y a encore pas mal d'options du compilateur que je ne maitrise pas du tout, j'esp�re que j'aurais pas trop de soucis comme sa, m'enfin sa me fait d�couvrir!

    Je passe le post en r�solu, merci encore.

+ 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