链接问题(VC6)

Link issues (VC6)

来源: link 标签:c++visual-c++linkervc6 更新时间:

  问题

我已经打开了一个libray及其测试工具的旧工作区.它过去工作正常,但现在不起作用,旧版本的代码也不起作用,也有相同的错误.我已经尝试重新创建项目,这也会导致相同的错误.在项目设置中似乎没有任何错误,生成的代码在主应用程序中工作.

我已经删除了大多数文件,并将其降低到生成错误的最低限度.不幸的是,我无法发布项目,因为这在生产代码中使用.

我通常得到的LNK2001链接器错误意味着我已经离开库或忘记实现虚拟函数.但这是标准模板库的一部分 – 并且是标题.

列为在IOCompletionPort.obj中遇到问题的代码实际上并不直接使用std::string,但是调用的类是:Comms::Exception接受std::stringGetLastErrorWSAGetLastError的值.

错误中提到的函数(GetMessage)已经实现,但是是是一个虚拟函数,所以其他类可以在需要时覆盖它.但是,似乎编译器已经将其作为Ansi版本,但我在可以控制的设置中找不到任何选项.我怀疑这可能是问题,但由于库的选项方法很少,我无法确定.但是,在编译器选项中指定_MBCS的两个项目.

------------------------------------------------------------------------------------------------------------------------------------- * 错误LNK2001:未解决的外部符号"公共:虚拟类 STD :: basic_string,类 std :: allocator>__thiscall 逗号:: exception:: GetMessageA(void)const“(? [email protected] [email protected]@@UBE? [email protected][email protected]@[email protected][email protected]@[email protected]@[email protected]) 调试/ TestComms.exe:致命错误LNK1120:1个未解决的外部 执行link.exe的错误.

TestComms.exe – 2个错误,0个警告

有什么建议吗?我今天早上大部分时间都失去了,也不想损失下午的大部分时间。

  最佳答案

一种可能性在于Win32 ANSI / Unicode“name-manswing”,它将符号GetMessage转换为GetMessageAGetMessageW.有三种可能性:

  1. javascript – windows.h没有加载,所以GetMessage保持GetMessage

  2. javascript – windows.h加载了为ANSI设置的符号,所以GetMessage变成GetMessageA

  3. windows.h加载了Unicode的符号集,所以GetMessage变成GetMessageW

如果您以触发两种不同场景的方式编译了两个不同的文件,那么您将会收到链接器错误.错误消息表明Comms::Exception类是上面#2的实例 – 也许它在没有加载windows.h的某个地方使用?

我在你的地方做的其他事情,就像一个例行事项一样:

1)确保我的include和库路径不包含我不期望的任何内容.

2)做一个“构建干净”,然后手动验证,必要时删除任何额外的对象文件。

3)确保在包含语句中没有任何硬编码路径,这并不意味着当项目最初重建时它们意味着什么.

编辑:与格式斗争:(

  相同标签的其他问题

c++visual-c++linkervc6