Creation et importation d'une library statique (.lib) [Visual C++] - C++ - Programmation
Marsh Posté le 15-10-2007 à 10:38:43
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 ?
Marsh Posté le 15-10-2007 à 11:00:52
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à ...
Marsh Posté le 15-10-2007 à 17:20:46
c'est pas un souci de name mangling ? les fonctions de ta dll sont déclarées en extern "C" ?
Marsh Posté le 15-10-2007 à 21:28:59
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.
Marsh Posté le 16-10-2007 à 09:47:58
Décidément ça veut pas linker
Marsh Posté le 16-10-2007 à 10:21:31
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é).
Marsh Posté le 16-10-2007 à 13:19:53
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.
Marsh Posté le 16-10-2007 à 15:35:05
--------------------Configuration: TiersdeConfiance - Win32 Release-------------------- |
Marsh Posté le 16-10-2007 à 16:09:44
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
Marsh Posté le 16-10-2007 à 17:04:22
ca marche pas, j'ai encore plus d'erreurs.
Marsh Posté le 16-10-2007 à 23:07:48
quand je vois le message suivant :
Citation :
|
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
Marsh Posté le 17-10-2007 à 09:26:25
Tout m'a l'air bon pourtant :
Code :
|
Marsh Posté le 17-10-2007 à 09:28:07
et la méthode InitInstance :
Code :
|
Marsh Posté le 18-10-2007 à 10:34:30
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) .
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 :
|
Mais j'ai toujours le porblème de linkage .
Marsh Posté le 15-10-2007 à 10:01:03
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