为什么我突然从游戏项目中收到引用我的游戏引擎的未解析外部符号

Why am I suddenly getting unresolved external symbols referencing my game engine from game project

提问人:Ashley Muller 提问时间:1/29/2014 更新时间:1/29/2014 访问量:411

问:

我最近开始构建一个游戏引擎和一些游戏演示来帮助构建引擎,所以在这个阶段它仍然非常简单。该引擎被构建为静态库,并链接到游戏项目。我正在使用 Visual Studio Express 2012。

几个小时前,我尝试将TinyXML源文件添加到我的引擎中。引擎构建良好,但是当我构建项目时,我开始从引擎中的主 .cpp 引用函数中获得未解析的外部符号,这些函数自启动以来一直有效:

2>main.obj : error LNK2019: unresolved external symbol "public: static class AshEngine::SystemManager & __cdecl AshEngine::SystemManager::GetInstance(void)" (?GetInstance@SystemManager@AshEngine@@SAAAV12@XZ) referenced in function _main
2>main.obj : error LNK2019: unresolved external symbol "public: bool __thiscall AshEngine::SystemManager::Start(class AshEngine::AshGame *,char const *,int,int)" (?Start@SystemManager@AshEngine@@QAE_NPAVAshGame@2@PBDHH@Z) referenced in function _main

这是我的主要:

int main(int argc, const char** argv)
{
    Game* game = new Game();
    bool success = AshEngine::SystemManager::GetInstance().Start(game, "Monopoly", SCREEN_WIDTH, SCREEN_HEIGHT);

    return 0;
}

我尝试重建、清理、重新启动 PC、仔细检查 lib 包含、将 lib 文件夹添加到 VCC 目录并直接在“其他依赖项”中指定 lib。我已经撤消了我所有的更改(手动,因为我的 PC 上没有源代码控制 - 我现在将修复 :/),我已经使用相同的引擎在 3 个游戏演示项目上对其进行了测试,并且我使用该引擎创建了一个新项目,它们都有相同的问题。

当我打开详细链接器日志记录时,我注意到我的引擎库出现在“未使用的库”下。我尝试打开/OPT:NOREF链接器标志,但没有帮助。

我不知为什么它找不到这 2 个符号。不知何故,我在添加TinyXML时破坏了我的引擎。我有一种感觉,当我尝试将TIXML_USE_STL添加到“所有配置”时,我破坏了所有预处理器定义。我已经重新添加了 WIN32、_DEBUG 和 _CONSOLE,但不确定还有什么。在此之后,我肯定会安装源代码管理,以便我可以恢复更改。

同时,我怎样才能弄清楚为什么我的项目找不到这些符号?

C++ 链接器 static-libraries unresolved-external tinyxml

评论

1赞 Raymond Chen 1/29/2014
在哪里实施?AshEngine::SystemManager::GetInstance
0赞 Ashley Muller 1/29/2014
Lol Raymond - 它是在 ifdef PLATFORM_WIN32中实现的......当我不小心破坏了我的预处理器定义时,它被核弹了......重新添加,现在一切都很好。谢谢你让我看那里。3 小时下水道:(

答:

1赞 Ashley Muller 1/29/2014 #1

符号的实现位于我不小心从预处理器定义中删除的 #ifdef /facepalm 中