Visual Studio: как создать статическую библиотеку для использования в другом проекте (как избежать ошибок компоновки STL) - PullRequest
2 голосов
/ 31 июля 2009

Я новичок в Visual Studio и Windows как в платформе разработки, и у меня возникают проблемы с подключением статической библиотеки из одного «Проекта» в исполняемый файл в другом. Библиотека собирается без ошибок, но связывает залоги после нахождения нескольких экземпляров шаблона STL, определенных в библиотеке.

Для целей этого вопроса Проект A создает статическую библиотеку, которую я затем пытаюсь связать с Проектом B.

Я надеюсь, что кто-то может указать, что мне здесь не хватает.

Командная строка сборки для проекта 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

Командные строки компоновки и компоновки для проекта 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>  

Когда запускается компоновщик, я получаю массу ошибок следующего вида:

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

Я думаю, это говорит мне о том, что экземпляр STL, определенный в объекте моей библиотеки, также определен в msvcprtd.lib. Что мне неясно, так это то, что я неправильно собираю свою статическую библиотеку или неверные настройки компоновщика. Буду признателен за любые указания по этому вопросу.

1 Ответ

5 голосов
/ 31 июля 2009

Указаны несоответствующие библиотеки времени выполнения.

Устанавливается в / MTd для проекта A и / MDd для проекта B.

  • / MTd - многопоточная отладка
  • / MDd - многопоточная отладочная DLL
...