0

我遇到了一个讨厌的链接器错误的问题,希望能找到解决方法的提示。

我理解错误的方式是,链接器无法在“BFStream”类中找到名为“read”的函数的实现。该代码包括 BFStream 类的标头。有一个导入库 QRFound.lib,它接收从 QRFound.dll 导出的函数。dll 和 lib 都在文件系统的 lib 目录中。lib 目录在项目属性中的两个位置提供:VC++ Directories->Library Directories 和 Linker->Additional Library Directories。QRFound.lib 在 Linker->Input->Additional Dependencies 中指定,并且在列表的第一位。

我知道 QRFound.dll 包含 BFStream::read 的实现,因为我使用依赖项walker 来查看它。但是 C++ 装饰与链接器错误略有不同,这让我很怀疑:?read@BFStream@@QAE_NPADH@Z

链接器错误是:

1>     Creating library C:\MyProj\Debug\MyDisplay.lib and object C:\MyProj\Debug\MyDisplay.exp
1>MyCmdReceiver.obj : error LNK2001: unresolved external symbol "public: bool __thiscall BFStream::read(char *,__int64)" (?read@BFStream@@QAE_NPAD_J@Z)
4

2 回答 2

3

在您的符号上运行 undname.exe 实用程序会产生:

Undecoration of :- "?read@BFStream@@QAE_NPADH@Z"
is :- "public: bool __thiscall BFStream::read(char *,int)"

所以,是的,显然最后一个参数不匹配,__int64不匹配int。您没有发布该方法的实际声明,因此我无法正确猜测这种不匹配是如何发生的。我怀疑这是某种宏观汤问题。

于 2012-06-13T15:03:07.057 回答
0

我怀疑您正在调用使用不同编译器构建的 DLL。

如果您有 DLL 的源代码,请使用您当前的编译器构建它:名称修改将保持一致,您应该能够解决问题。

如果您没有 DLL 的源代码,请查看它是否具有 COM 接口。

于 2012-06-13T14:45:45.407 回答