【发布时间】:2010-09-05 13:47:37
【问题描述】:
我打开了一个旧工作区,它是一个库及其测试工具。它过去可以正常工作,但现在不能,旧版本的代码也不能正常工作,出现相同的错误。我试过重新创建项目,这也会导致同样的错误。项目设置中似乎没有任何问题,并且生成的代码在主应用程序中有效。
我已删除大部分文件并将其降至最低限度以生成错误。不幸的是,我无法发布该项目,因为这是在生产代码中使用的。
我得到的 LNK2001 链接器错误通常意味着我离开了库或忘记实现虚拟函数。然而,这是标准模板库的一部分 - 并且是一个标题。
在 IOCompletionPort.obj 中被列为有问题的代码实际上并没有直接使用 std::string,而是调用了一个这样做的类:Comms::Exception 接受 std::string 和 GetLastError 的值或WSAGetLastError.
错误中提到的函数 (GetMessage) 已实现,但它是一个虚函数,因此其他类可以在需要时覆盖它。但是,编译器似乎已将其作为 Ansi 版本,但我在设置中找不到任何可以控制它的选项。我怀疑这可能是问题所在,但由于图书馆的选择方式很少,我无法确定。不过这两个项目都要在编译器选项中指定_MBCS。
--------配置:TestComms - Win32 调试-------------------- 链接... Comms.lib(IOCompletionPort.obj) :错误LNK2001:未解析的外部符号“公共:虚拟类 std::basic_string,类 std::allocator > __thiscall Comms::Exception::GetMessageA(void)const " (?GetMessageA@ 异常@Comms@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) Debug/TestComms.exe : 致命错误 LNK1120: 1 unresolved externals 执行 link.exe 时出错。
TestComms.exe - 2 个错误,0 个警告
有什么建议吗?我早上的大部分时间都在这件事上迷失了,我也不想下午的大部分时间都迷失了。
【问题讨论】:
标签: c++ visual-c++ linker visual-c++-6