/ MD和/ MDd(使用运行时库)有什么区别?

Gil*_*evi 5 c++

当我在代码中添加以下行时:

std::string sFrameTag
Run Code Online (Sandbox Code Playgroud)

我收到以下链接器错误:

错误34错误LNK2005:“ public:__thiscall std :: basic_string,class std :: allocator> ::〜basic_string,class std :: allocator>(void)”(?? 1?$ basic_string @ DU?$ char_traits @ D @已在VFPAnalyzerApi.lib(VFPEvaluation.obj)msvcprtd.lib中定义的std @@ V?$ allocator @ D @ 2 @@ std @@ QAE @ XZ)

我在C / C ++->代码生成->运行时库下查看了项目属性,并将其从更改为/MDd/MD 并以某种方式消失了错误。有人可以解释一下我到底做了什么更改,为什么有所作为?

谢谢!!!

sim*_*onc 5

MSDN对此有很好的文档。

简而言之,/MDd将C和C ++标准库的调试版本的必要部分链接到您的DLL中。 /MD相似,但使用NDEBUG标准库的版本。如果您尝试链接结合了调试和发布标准库的代码,则会遇到符号冲突,因为这两个库都将提供相同的功能集。