2009-07-30 2 views
2

Ich bin neu in Visual Studio und Windows als Entwicklungsplattform, und ich habe Probleme, eine statische Bibliothek von einer zu verknüpfen. Project 'in eine ausführbare Datei in einem anderen. Die Bibliothek wird ohne Fehler erstellt, verbindet jedoch nach dem Auffinden mehrerer in der Bibliothek definierten STL-Vorlageninstanzen die Bails.Visual Studio: Erstellen einer statischen Bibliothek zur Verwendung in einem anderen Projekt (Vermeiden von STL-Verknüpfungsfehlern)

Für die Zwecke dieser Frage, baut Projekt A eine statische Bibliothek, die ich dann in Project B. kann

Ich bin der Hoffnung, jemand zu verbinden mit versuchen, darauf hinweisen, was ich hier fehlt.

Die Build-Befehlszeile für das Projekt A:

/Od <includes> /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_WIN32_WINNT=0x0501" /D "DEBUG" /D "WS4_WIN32" /D "AF" /D "_VC80_UPGRADE=0x0710" /D "_MBCS" /Gm /EHsc /RTC1 /MTd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /Wp64 /ZI /TP /wd4290 /errorReport:prompt 

Die Build-und Link-Befehlszeilen für das Projekt B:

/Od <includes> /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /wd4290 /errorReport:prompt 
/OUT:<exe name> /INCREMENTAL /NOLOGO /MANIFEST /MANIFESTFILE:"<exe name>.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:<pdb name> /SUBSYSTEM:CONSOLE /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib <Project A Lib file> 

Wenn die Linker läuft, bekomme ich eine Tonne von Fehlern der folgenden form:

msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "<some STL template instantiation>" (<mangled name>) already defined in <Project A>.lib(<some Project A object>.obj) 

Ich denke, das ist mir sagen, dass eine STL Instanziierung in einem Objekt meiner definiert Bibliothek ist auch in msvcprtd.lib definiert. Was mir nicht klar ist, ist, ob ich meine statische Bibliothek nicht korrekt erstelle oder ob meine Linker-Einstellungen falsch sind. Ich würde mich über jegliche Hinweise zu diesem Thema freuen.

Antwort

5

Sie haben nicht übereinstimmende Laufzeitbibliotheken angegeben.

Es ist/MTd für Projekt A und/MDd

für Projekt B gesetzt
  • /MTd - Multithreaded Debug
  • /MDd - Multithreaded Debug DLL
+0

Dank. Das hat den Trick gemacht. Eine genauere Überprüfung der Build-Konfiguration hätte dies gelöst. Würde sich jemand darum kümmern, warum dieses Missverhältnis diesen spezifischen Fehler verursacht? –

+0

Dieser Link von MSDN erklärt, dass dies auftreten würde. http://msdn.microsoft.com/en-us/library/6wtdswk0(VS.80).aspx –