[C++] Compilation et link de librairie statique avec une DLL (VC++)?

Compilation et link de librairie statique avec une DLL (VC++)? [C++] - C++ - Programmation

Marsh Posté le 09-08-2004 à 12:44:10    

Bonjour,
 
Mon workspace est composé de 2 projets :
- un qui génère un .lib, et qui utilise lui-meme "Api.lib" et "share.lib" (j'ai pas accès au code de ces 2 dernieres lib)
- l'autre qui génère une DLL et qui utilise le .lib précédent
 
1/ Quand je compile, lors du link du .lib, j'ai le message suivant :
"Api.lib(Api.dll) : warning LNK4006 : __NULL_IMPORT_DESCRIPTOR already defined in share.lib(share.dll); second definition ignored"
 
J'ai bien vérifié que mes 2 projets sont des Multithreaded DLL, comme indiqué par les quelques conseils que j'ai trouvés sur le Net. Mais ca ne change rien.
 
Que faut-il faire pour ne plus avoir ce message ?
 
2/ Pourquoi mon 1er projet est systématiquement recompilé quand je ne modifie qu'un fichier du 2è projet ?


Message édité par xyz75 le 09-08-2004 à 14:49:12
Reply

Marsh Posté le 09-08-2004 à 12:44:10   

Reply

Marsh Posté le 09-08-2004 à 15:51:51    

1/ __NULL_IMPORT_DESCRIPTOR est présent dans chaque .lib et marque la fin de la liste d'import. Tu as ce message parce que tu crées un .lib qui fusionne share.lib et api.lib, donc ce symbole est présent 2 fois. La solution est simple, et accélèrera qui plus est l'édition de liens : supprime share.lib et api.lib de ton projet lib statique. En les mettant, tu provoques leur recopie dans ton nouveau .lib. Tu n'a d'ailleurs peut être plus besoin de api.lib et share.lib si tu link avec ton .lib. Vérifie : ton .lib doit au moins avoir la taille de api + share.lib réunis. Ces 2 .lib n'ont rien à faire dans ton projet statique, déplace les dans ton projet dll. Quand on crée une lib statique, normalement, on ne spécifie aucun .lib au linkage.
2/ Peut être y-a-t-il un problème dans les dépendances. Fait clic droit sur ton projet -> "Dépendances du projet..." et marque ta dll comme dépendante du projet .lib.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed