Problème d'utilisation d'une static library, erreur LNK1276

Résolu
Servlax Messages postés 14 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 20 juillet 2007 - 20 juil. 2007 à 17:00
Servlax Messages postés 14 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 20 juillet 2007 - 20 juil. 2007 à 20:29
Bonjour, je poste dans la partie "Divers / Débutant(s)" à défaut d'en avoir trouvé une plus adéquate. Excusez-moi par avance si je me trompe d'endroit...

Voici mon problème, à prori simple mais qui me casse la tête depuis des heures. J'ai créé une série de librairies statiques dans une solution Visual Studio 2005. Dans cette même solution, j'ai un projet de "test" qui me permet de tester le fonctionnement de ces librairies. Celles-ci fonctionnent parfaitement en debug comme en release.

Mais un  problème survient lorsque je veux utiliser ces mêmes lib DEPUIS UN AUTRE PROJET (solution). En debug, pas de problème, la lib est reconnue et le résultat est celui attendu. Mais en RELEASE, impossible de compiler ! Je tiens à préciser que l'utilise bien les versions de la lib correspondantes au mode debug et release à chaque fois.

Voici la ligne qui pose problème :

#pragma comment(lib, "../Dossier solution des lib/release/NomDeLaLib.lib")

Le message d'erreur correspondant est :

fatal error LNK1276: invalid directive 'Dossier solution des lib/release/NomDeLaLib.lib' found; does not start with '/'.

En mode DEBUG, avec la ligne qui suit, tout se passe bien :

#pragma comment(lib, "../Dossier solution des lib/debug/NomDeLaLib.lib")

Les headers de la lib sont bien entendus inclus, le problème ne semble pas venir de là.

Y a-t-il des utilisateurs expérimentés ici ayant rencontré un tel problème ? Je précise que j'utilise Visual C++ depuis des mois, et que je n'avais jamais rencontré un tel problème auparavant !

Merci à ceux qui sauront m'indiquer de possibles solutions ...

2 réponses

Servlax Messages postés 14 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 20 juillet 2007
20 juil. 2007 à 20:29
Merci pour votre suggestion juju12.

Toutefois, votre conseil ne s'avère pas efficace, puisque le fichier en question est bien trouvé par le compilateur (il suffit d'altérer le nom pour constater que le message d'erreur change).

En fait, des heures de tests et de lectures intensives ont révélé que les "#pragma comment(lib, ...)" NE SONT PAS la solution préconisée par Microsoft pour l'inclusion de librairies tierces dans les projets. Je vous donne ici la marche à suivre officielle pour ceux qui tomberaient sur la même erreur (avec un peu de chance cette page sera référencée par Google, fournissant une solution en moins de 2 min) :

Il faut, dans les propriétés de votre projet (du moins sous Visual Studio 2005), vous rendre sous Configuration Properties, puis sous Linker, puis sous Input. Dans le panneau de droite, il suffit d'ajouter dans Additional Dependencies, entre double guillements le chemin complet ou relatif vers le ou les fichiers lib nécessaires à votre projet. Prenez garde de bien choisir dans Configuration (en haut à gauche dans la fenêtre de propriétés), le mode (debug ou release) correspondant à celui des lib, sans quoi le comportement de ces dernières risque d'être imprévisible (buffer overrun, invalid pointers, etc).

Une fois ces quelques manipulation, finalement très simples à effectuer si on les connait, le comportement de votre programme sera uniforme quelque soit le mode choisi. Malheureusement très peu de sites expliquent ceci (il faut fouiller dans la MSDN bien longtemps...).
3
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
20 juil. 2007 à 17:42
Ca doit être dans les options différentes entre DEBUG et RELEASE en ce qui concerne les dossiers de link pour les lib. T'as essayé de taper le chemin en entier?
0
Rejoignez-nous