我最近开始构建一个游戏引擎和几个游戏演示来帮助构建引擎,所以在这个阶段它仍然非常简单。该引擎构建为静态库并链接到游戏项目。我正在使用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目录并直接在“Additional Dependencies”中指定lib。我已经改变了所有的更改(手动,因为我的PC上没有源代码控制 - 我现在要修复的东西:/),我已经使用相同的引擎在3个游戏演示项目上测试了它,我已经创建了使用引擎的新项目,它们都有同样的问题。
当我打开详细的链接器日志记录时,我注意到我的引擎库出现在“未使用的库”下。我尝试打开/ OPT:NOREF链接器标志,但它没有帮助。
我不知道为什么它找不到这2个符号。不知何故,我在添加TinyXML时破坏了我的引擎。当我尝试将TIXML_USE_STL添加到“所有配置”时,我有一种感觉,我已经完成了所有预处理器定义。我已经读过WIN32,_DEBUG和_CONSOLE,但不知道还有什么可能。我肯定会在此之后安装源代码控制,以便我可以还原更改。
与此同时,我如何弄清楚为什么我的项目找不到这些符号?
答案 0 :(得分:1)
符号的实现位于#ifdef中,我从预处理器定义/ facepalm中意外删除了