在 Visual Studio 中分离项目时遇到问题
Posted
技术标签:
【中文标题】在 Visual Studio 中分离项目时遇到问题【英文标题】:Trouble separating projects in visual studio 【发布时间】:2016-01-10 22:21:36 【问题描述】:我正在使用 Visual Studio (Community 2013) 中的 SDL 在 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】:确保您链接到完全相同的库(注意不要将 Debug 与 Release 混为一谈)。
在 Linker -> Input -> Additional Dependencies
中确保包含正确的 .lib 文件
确保您传递相同的预处理器指令并且您的库路径设置正确。
澄清一下,如果你运行这个
typedef int OtherInt;
void f(OtherInt m);
int main()
f(0);
链接器也会抱怨int
。错误 LNK2019:函数 _main 中引用的未解析的外部符号“void __cdecl f(int)”(?f@@YAXH@Z)
【讨论】:
啊,所以我的链接器错误中的int
并不表示我有任何不当行为?至于额外的依赖和库目录,两个项目的字符串完全相同,两个项目的预处理器指令都没有改变。
似乎isKeyDown
之类的函数是您的回调函数,而链接器找不到这些函数。确保在当前项目中提供了它们的定义,或者如果它们在另一个项目中,它们被正确导出并且链接器可以找到它们。检查这个link以上是关于在 Visual Studio 中分离项目时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 2008 中分析 MsTest 的单元测试?
在 Visual Studio 中添加 VB6 引用会给出“类型库导入器在类型验证期间遇到错误”
如何在 Windows 7 中使用 OpenGL、Glut 和 Visual Studio 2008 准备 C++ 项目