我最近安装了Visual Studio 2010并使用CMake为我的项目生成解决方案文件.此过程以前在VS2005上运行良好.
我遇到的第一个问题是因为新的"移动构造函数",所以我不得不从我的代码中删除一些隐式转换 - 公平,现在可行.
我目前的情况如下:我正在编译DLL 1,它只依赖于某些系统库(Kernel32等)和CRT,以及链接到DLL 1的DLL 2,以及一些第三方库.
我得到的错误是:
DLL1.lib(DLL1.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) already defined in objFromDLL2.obj
Run Code Online (Sandbox Code Playgroud)
这似乎正是这里描述的问题.
但是,此线程中没有任何内容可以解决我的问题.
我错过了什么?如果我需要提供更多信息,请告诉我,我会尽我所能编辑问题.
更新:已经有一段时间了,我仍然没有解决方案.我一直在用评论的回复来更新问题,我正在研究一个可行的不同代码库 - 我开始认为旧代码的向后兼容性终于开始枯竭,我应该只是继续.
更新:我发现了什么可能是一个非常不受欢迎的链接器标志,/ FORCE:MULTIPLE,它通过忽略除符号的第一个定义之外的所有内容将错误转换为警告.这样做必然会产生不良副作用.对此标志的测试突出显示了LNK2001:未解析的std :: string :: npos,它隐藏在所有先前的LNK2005错误中.折磨永无止境.