C++ 未解决的外部符号错误

5

有人知道这是什么意思吗?

1>  Generating Code...
1>BlankWindowDXbaseImpl.obj : error LNK2019: unresolved external symbol "public: __thiscall DXBase::DXBase(void)" (??0DXBase@@QAE@XZ) referenced in function "public: __thiscall BlankWindowDXBaseImpl::BlankWindowDXBaseImpl(void)" (??0BlankWindowDXBaseImpl@@QAE@XZ)
1>BlankWindowDXbaseImpl.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall DXBase::~DXBase(void)" (??1DXBase@@UAE@XZ) referenced in function "public: virtual __thiscall BlankWindowDXBaseImpl::~BlankWindowDXBaseImpl(void)" (??1BlankWindowDXBaseImpl@@UAE@XZ)
1>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall DXBase::shutdown(void)" (?shutdown@DXBase@@QAEXXZ) referenced in function _wWinMain@16
1>main.obj : error LNK2019: unresolved external symbol "public: bool __thiscall DXBase::initalize(struct HINSTANCE__ *,struct HWND__ *)" (?initalize@DXBase@@QAE_NPAUHINSTANCE__@@PAUHWND__@@@Z) referenced in function _wWinMain@16
1>C:\backup\development\directXworkspace\BlankWindow\Debug\BlankWindow.exe : fatal error LNK1120: 4 unresolved externals
6个回答

15

这意味着您有未解决的外部符号。

什么是符号? 符号可以是变量、类、成员函数或函数等任何东西。

为什么它们未被解决? 你的代码某些部分(或者你使用的库)依赖于这些符号,但由于你没有正确地链接库或实现它们,因此它们无法找到。


1
当然,你是对的,链接器找不到正确的库。但是,在VS2010中,我将lib路径设置为包括所需库的路径。它就是无法找到它。我感到非常沮丧,于是把类和头文件移动到同一个项目中,这样就可以在本地找到库了。 - Sublimemm
2
显然你做错了,因为这是一件很正常的事情。冒着被看作自以为是的风险,你需要:1)将库目录添加到“常规/附加库目录”中;2)将库本身添加到“输入/附加依赖项”中;3)在第2步引用库时不要忘记“.lib”。 - john

4

是的,这意味着您的程序调用了已声明但没有函数体的函数。

您是否希望这些函数是您代码的一部分,还是由某个库提供?


让我立刻发现了错误! - absentmindeduk

1

这意味着你有一个链接问题。(链接器找不到具有这些符号的库)你需要在库路径中包含所需的库。


0

我之前也遇到了同样的问题,如果你添加 #pragma comment(lib,"d3d9.lib") 这将包含编译代码所需的库文件。它只是会混淆应该选择哪个 lib 文件,64位还是32位。希望这可以帮到你。


0

我分享一个刚刚遇到的难以检测的问题:如果你链接了两个位于不同库路径(/PathToA//PathToB/)中的库文件(a.libb.lib),那么如果在路径/PathToA/中存在旧版本的b.lib,就可能出现未解决的外部引用问题。

在这种情况下,你可能会错误地链接到一个不需要的库文件。因此,针对这个特定的多重链接问题的解决方案是确保你的库路径中没有几个版本的库文件。


0

可能是你没有正确链接库。

但你应该提供更多细节...看起来像是在问题竞赛中提问。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接