Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1146 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [Visual C++] Creation et importation d'une library statique (.lib)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Visual C++] Creation et importation d'une library statique (.lib)

n°1623632
Giz
Posté le 15-10-2007 à 10:01:03  profilanswer
 

Bonjour,
 
J'ai crée un projet (A) sous Visual C++ 6, une library statique. Je compile, j'obtiens le .lib. Dans un autre projet (B), j'y copie le fichier .lib généré par le projet A. Je règle les "settings" du projet B pour ajouter le .lib dans les "link". Lorsque j'appelle une méthode de la lib incluse dans B, j'obtiens l'erreur :
 

TiersdeConfianceAuto.obj : error LNK2001: unresolved external symbol "unsigned long __cdecl TEDETIS_E_enumCertificateInStore(char *,struct CertInfo_str * *,int *)" (?TEDETIS_E_enumCertificateInStore@@YAKPADPAPAUCertInfo_str@@PAH@Z)


 
En clair, il ignore ma library ! Pourquoi ? Doit-on explicitement exporter les fonctions d'une library statique (comme une library dynamique DLL) ?
 
Merci.


Message édité par Giz le 15-10-2007 à 10:01:23

---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
mood
Publicité
Posté le 15-10-2007 à 10:01:03  profilanswer
 

n°1623667
Giz
Posté le 15-10-2007 à 10:38:43  profilanswer
 

J'ai bien mis le #include en entête, j'ai bien configuré le path des include dans "directories" pour ajouter ceux concernant la library incluse, mais rien a faire. La library du projet A est compilée en mode "Multithreaded", Le projet B est une dll compilée en "Multithreaded DLL". Qu'est qui pourrait encore clocher ?  :(


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1623683
Giz
Posté le 15-10-2007 à 11:00:52  profilanswer
 

En fait c'est vraiment un problème de linkage car quand je fais une erreur dans l'appel (prototype de fonction non respecté), il me met bien que l'appel est incorrecte à la compilation. Ce n'est donc pas un problème d'include mais bien au niveau du .lib qui est pourtant bien intégré dans le projet.
Je désespère là ...  :(


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1624090
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 15-10-2007 à 17:20:46  profilanswer
 

c'est pas un souci de name mangling ? les fonctions de ta dll sont déclarées en extern "C" ?

n°1624210
Giz
Posté le 15-10-2007 à 21:28:59  profilanswer
 

Pour la DLL, pas de problème du projet (si je n'inclus pas la lib, elle se génère bien).
Autre chose de surprenant : certaine fonctions de la lib marchent en fait (reconnues) d'autres non. C'est lié à un .h qui "marche" et un autre non en gros...v voir ça.


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1624391
Giz
Posté le 16-10-2007 à 09:47:58  profilanswer
 

Décidément ça veut pas linker :/


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1624410
godbout
Génial.
Posté le 16-10-2007 à 10:21:31  profilanswer
 

Faut pas faire un .h que tu fous dans ton projet qui utilise la lib ?
 
J'me rappelle avoir eu des problèmes similaires y a longtemps, j'crois les avoir réglés avec l'utilisation d'un .h, quand j'étais moi même compilateur de la lib, ou soit en bidouillant les options quand on me filait une lib (une option avec un truc sur les "_", je sais c'est vague, désolé).

n°1624651
Giz
Posté le 16-10-2007 à 13:19:53  profilanswer
 

Ben j'ai bien inclus les .h de la lib dans projet pourtant. C'est vraiment un problème comme s'il ne trouvait pas l'implémentation de la fonction dans la lib.


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1624786
Giz
Posté le 16-10-2007 à 15:35:05  profilanswer
 

--------------------Configuration: TiersdeConfiance - Win32 Release--------------------
Linking...
mfcs42d.lib(dllmodul.obj) : warning LNK4006: _DllMain@12 already defined in msvcrt.lib(dllmain.obj); second definition ignored
   Creating library Release/TiersdeConfiance.lib and object Release/TiersdeConfiance.exp
TiersdeConfianceAuto.obj : error LNK2001: unresolved external symbol "unsigned long __cdecl TEDETIS_E_openSSLSession(struct CertInfo_str *,char *,struct SSLSessionInfo * *)" (?TEDETIS_E_openSSLSession@@YAKPAUCertInfo_str@@PADPAPAUSSLSessionInfo@@@Z)
TiersdeConfianceAuto.obj : error LNK2001: unresolved external symbol "unsigned long __cdecl TEDETIS_E_enumCertificateInStore(char *,struct CertInfo_str * *,int *)" (?TEDETIS_E_enumCertificateInStore@@YAKPADPAPAUCertInfo_str@@PAH@Z)
TiersdeConfianceAuto.obj : error LNK2001: unresolved external symbol "unsigned long __cdecl TEDETIS_E_closeSSLSession(struct SSLSessionInfo *)" (?TEDETIS_E_closeSSLSession@@YAKPAUSSLSessionInfo@@@Z)
Release/TiersdeConfiance.dll : fatal error LNK1120: 3 unresolved externals
Error executing link.exe.
 
TiersdeConfiance.dll - 4 error(s), 1 warning(s)


 
 :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1624817
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-10-2007 à 16:09:44  profilanswer
 

je t'ai dit que c'était un problème de décoration de fonction ! tu dois déclarer les fonctions de ta DLL en extern "C", sinon tes fonctions seront décorées et ne pourront pas être appelées depuis un programme C

mood
Publicité
Posté le 16-10-2007 à 16:09:44  profilanswer
 

n°1624846
Giz
Posté le 16-10-2007 à 17:04:22  profilanswer
 

ca marche pas, j'ai encore plus d'erreurs. :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1625031
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-10-2007 à 23:07:48  profilanswer
 

quand je vois le message suivant :

Citation :


mfcs42d.lib(dllmodul.obj) : warning LNK4006: _DllMain@12 already defined in msvcrt.lib(dllmain.obj); second definition ignored
   Creating library Release/TiersdeConfiance.lib and object Release/TiersdeConfiance.exp


je te pose la question suivante : ta dll est une dll MFC ? si oui (ce dont je suis quasiment certain), alors tu dois dégager le DllMain car cette fonction est déjà définie dans dans msvcrt.lib.
tu dois donc instancier un objet dérivé de CWinApp, dont la méthode InitInstance() sera appelée par le DllMain() de msvcrt

 

edit: http://support.microsoft.com/defau [...] us;q148652


Message édité par Harkonnen le 16-10-2007 à 23:10:45
n°1625164
Giz
Posté le 17-10-2007 à 09:26:25  profilanswer
 

Tout m'a l'air bon pourtant   [:spamafote]  :
 

Code :
  1. // TiersdeConfiance.h : main header file for the TIERSDECONFIANCE DLL
  2. //
  3. #if !defined(AFX_TIERSDECONFIANCE_H__2B8205FC_398C_4B1B_BD99_B53C3330C2EA__INCLUDED_)
  4. #define AFX_TIERSDECONFIANCE_H__2B8205FC_398C_4B1B_BD99_B53C3330C2EA__INCLUDED_
  5. #if _MSC_VER > 1000
  6. #pragma once
  7. #endif // _MSC_VER > 1000
  8. #ifndef __AFXWIN_H__
  9. #error include 'stdafx.h' before including this file for PCH
  10. #endif
  11. #include "resource.h"  // main symbols
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CTiersdeConfianceApp
  14. // See TiersdeConfiance.cpp for the implementation of this class
  15. //
  16. class CTiersdeConfianceApp : public CWinApp
  17. {
  18. public:
  19. CTiersdeConfianceApp();
  20. // Overrides
  21. // ClassWizard generated virtual function overrides
  22. //{{AFX_VIRTUAL(CTiersdeConfianceApp)
  23. public:
  24. virtual BOOL InitInstance();
  25. //}}AFX_VIRTUAL
  26. //{{AFX_MSG(CTiersdeConfianceApp)
  27.  // NOTE - the ClassWizard will add and remove member functions here.
  28.  //    DO NOT EDIT what you see in these blocks of generated code !
  29. //}}AFX_MSG
  30. DECLARE_MESSAGE_MAP()
  31. };
  32. /////////////////////////////////////////////////////////////////////////////
  33. //{{AFX_INSERT_LOCATION}}
  34. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  35. #endif // !defined(AFX_TIERSDECONFIANCE_H__2B8205FC_398C_4B1B_BD99_B53C3330C2EA__INCLUDED_)


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1625165
Giz
Posté le 17-10-2007 à 09:28:07  profilanswer
 

et la méthode InitInstance :
 

Code :
  1. BOOL CTiersdeConfianceApp::InitInstance()
  2. {
  3. // Register all OLE server (factories) as running.  This enables the
  4. //  OLE libraries to create objects from other applications.
  5. COleObjectFactory::RegisterAll();
  6. return TRUE;
  7. }


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1626225
Giz
Posté le 18-10-2007 à 10:34:30  profilanswer
 

En fait j'ai carrément intégré les .c et les .h dans mon projet A. J'ai les mêmes erreurs (problème de linkage)  :ouch: .
J'ai tout essaié : j'ai bien géré mes sources .c comme un programme purement C. Dans le code de mon projet A, je mets dans le .cpp pour intégrer les sources C :
 

Code :
  1. #ifdef __cplusplus
  2. extern "C" {
  3. #endif
  4. #include "TEDETIS_E_SEND_ENVELOP.H"
  5. #include "TEDETIS_E_SSL_SESSION.H"
  6. #ifdef __cplusplus
  7. }
  8. #endif


 
Mais j'ai toujours le porblème de linkage .  :cry:


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [Visual C++] Creation et importation d'une library statique (.lib)

 

Sujets relatifs
Création d'un bitmap de grande taille[Visual C++] Comment inclure une librairie .a dans un projet C
[RESOLU]creation fichier txtcréation site
[C++ / Qt4] Problème de link avec Visual C++ 2005Probléme compilateur visual 2005
Erreur de compilation de Qt 4 avec Visual C++ 2005Netbeans Visual Web Pack
Utilisation des web services avec Visual Studio 2008 (.NET frwk 3.5)recherche programmeur motivé pour aider à la création d'une webradio
Plus de sujets relatifs à : [Visual C++] Creation et importation d'une library statique (.lib)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR