Visual Studio:如何构建静态库以在另一个项目中使用(避免STL链接错误)

Ada*_*erg 2 c++ linker static visual-studio

我是Visual Studio和Windows的新手,作为一个开发平台,我很难将静态库从一个'Project'链接到另一个'Project'中的可执行文件.该库构建时没有错误,但在找到库中定义的几个STL模板实例后链接bails.

出于此问题的目的,项目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
Run Code Online (Sandbox Code Playgroud)

项目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>  
Run Code Online (Sandbox Code Playgroud)

当链接器运行时,我收到以下形式的大量错误:

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

我想这告诉我在我的库的对象中定义的STL实例化也在msvcprtd.lib中定义.我不清楚的是,如果我没有正确构建我的静态库,或者我的链接器设置是错误的.我将不胜感激任何指导.

Soo*_*Tan 5

您指定了不匹配的运行时库.

对于项目A,它被设置为/ MTd,对于项目B,它被设置为/ MDd.

  • / MTd - 多线程调试
  • / MDd - 多线程调试DLL