我最近开始构建游戏引擎和几个游戏演示来帮助构建引擎,所以在这个阶段它仍然非常简单。该引擎构建为静态库并链接到游戏项目。我正在使用 Visual Studio Express 2012。
几个小时前,我试图将 TinyXML 源文件添加到我的引擎中。引擎构建良好,但是当我构建项目时,我开始从引擎中的 main.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,但不确定可能还有什么。之后我肯定会安装源代码管理,这样我就可以恢复更改。
与此同时,我如何找出我的项目找不到这些符号的原因?
最佳答案
符号的实现在我不小心从预处理器定义/facepalm 中删除的#ifdef 中
关于c++ - 为什么我突然从游戏项目中获得引用我的游戏引擎的未解析外部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21424610/