Comment lier statiquement à l'aide de link.exe

J'ai essayé de lier statiquement à l'encontre d'une bibliothèque C++ appelée Poco sur Windows à l'aide de Visual Studio 2008 outils de ligne de commande.

- Je construire mon programme avec:

cl /I..\poco\lib /c myapp.cpp
link /libpath:..\poco\lib myapp.obj PocoNet.lib

Présente les résultats dans un fichier exe qui au moment de l'exécution nécessite PocoNet.dll et PocoFoundation.dll.

J'ai passé un certain temps à lire sur le lien Windows, et appris que cl /MT lien statique à l'encontre de la bibliothèque standard, tandis que cl /MD liens dynamiquement.

J'ai essayé de préciser les /MT, mais qui ne semblent pas à changer quoi que ce soit; mon application exige toujours le Poco Dll. (Je pense aussi que /MT est le comportement par défaut.)

Recherche dans le cadre de ..\poco\lib, j'ai trouvé qu'il y avait aussi un PocoNetmt.lib, mais en précisant qu'au lieu de PocoNet.lib a entraîné un tas de messages d'erreur LNK2005 ("déjà défini"):

msvcprt.lib(MSVCP90.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) already defined in exp.obj

J'ai ensuite essayé d'empilement sur plusieurs indicateurs:

  • /verbose:lib: utile pour voir ce qui se passe

  • /Zl: mêmes résultats qu'avant

  • /nodefaultlib:libcmt.lib /nodefaultlib:msvcprt.lib: j'ai cette erreur:

    PocoFoundationmt.lib(Exception.obj) : warning LNK4217: locally defined symbol ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ (public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)) imported in function __ehhandler$??0Exception@Poco@@QAE@ABV01@@Z
  • tomber la .lib au total, comme suggéré ici: même erreur que ci-dessus

J'ai aussi essayé quelques combinaisons de ce qui précède, en vain.

Des indices serait grandement apprécié. Mais tout aussi utile, serait tout pointeurs vers des ressources qui sont utiles pour le débogage (ou d'apprentissage) de ces types de problèmes.

OriginalL'auteur Yang | 2009-11-07