我正在使用Visual Studio中的SDL(社区2013)在C ++中创建游戏框架。我从一个项目开始,其中包含我的游戏框架和一些简单的应用程序代码来测试它。现在,我已经到了一个地步,我想将游戏代码与它使用的框架分开。我想有两个独立的Visual Studio项目,一个用于框架,另一个用于游戏。
然而,当我尝试这个时,我无法让以前正常工作的代码正确链接。我决定将原始项目保留为框架的项目,并将应用程序代码移动到新创建的项目中。据我所知,我已经设置了所有包含目录,库目录和其他依赖项以匹配现有项目。我还为新项目复制了必要的dll,因为它将是启动项目(我已经设置过)。
链接器似乎在使用SDL定义的数据类型的函数时遇到问题 - 例如,我有一个Input类来处理框架中的游戏输入。虽然我有一个功能(在项目拆分前工作):
bool isKeyDown(const SDL_Keycode& keycode);
它在链接器错误中显示为
error LNK2019: unresolved external symbol "public: bool __thiscall fj::Input::isKeyDown(int const &)" (?isKeyDown@Input@fj@@QAE_NABH@Z) referenced in function...
请注意SDL_Keycode
由于某种原因已成为int
,尽管文件中存在#include <SDL.h>
这个函数!此外,此功能在项目拆分中无动于衷,只能从新项目中调用。考虑到此错误消息数据类型更改,任何人都可以诊断我在这里做错了吗?
答案 0 :(得分:0)
确保链接到完全相同的库(小心不要将Debug与Release混合)。
在Linker -> Input -> Additional Dependencies
中确保包含正确的.lib文件
确保传递相同的预处理程序指令,并且正确设置了库路径。
只是澄清一下,如果你运行这个
typedef int OtherInt;
void f(OtherInt m);
int main() {
f(0);
}
链接器也会抱怨int
。错误LNK2019:未解析的外部符号&#34; void __cdecl f(int)&#34; (?f @@ YAXH @ Z)在函数_main