无法在visual studio中分离项目

时间:2016-01-10 22:21:36

标签: c++ visual-studio linker sdl-2

我正在使用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>这个函数!此外,此功能在项目拆分中无动于衷,只能从新项目中调用。考虑到此错误消息数据类型更改,任何人都可以诊断我在这里做错了吗?

1 个答案:

答案 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

中引用