Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ VisualStudio:如何构建用于另一个项目的静态库(避免STL链接错误)_C++_Visual Studio_Static_Linker - Fatal编程技术网

C++ VisualStudio:如何构建用于另一个项目的静态库(避免STL链接错误)

C++ VisualStudio:如何构建用于另一个项目的静态库(避免STL链接错误),c++,visual-studio,static,linker,C++,Visual Studio,Static,Linker,我不熟悉VisualStudio和Windows作为开发平台,在将静态库从一个“项目”链接到另一个“项目”的可执行文件时遇到了问题。库的构建没有错误,但是在找到库中定义的几个STL模板实例化后,链接bail 为了解决这个问题,项目A构建了一个静态库,然后我尝试在项目B中与之链接 我希望有人能指出我遗漏了什么 项目A的生成命令行: /Od <includes> /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_WIN32_WINNT=0x0501" /

我不熟悉VisualStudio和Windows作为开发平台,在将静态库从一个“项目”链接到另一个“项目”的可执行文件时遇到了问题。库的构建没有错误,但是在找到库中定义的几个STL模板实例化后,链接bail

为了解决这个问题,项目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中定义。我不清楚的是,我是否没有正确构建静态库,或者我的链接器设置是否错误。我希望您能提供相关指导。

您指定了不匹配的运行库

项目A设置为/MTd,项目B设置为/MDd

/多线程调试 /MDd-多线程调试DLL
谢谢这就成功了。对构建配置进行更仔细的检查可以解决这个问题。是否有人愿意详细说明这种不匹配导致此特定错误的原因?MSDN的此链接解释了这种情况的发生。