【问题标题】:SDL errors Visual Studio 2013SDL 错误 Visual Studio 2013
【发布时间】:2014-01-24 22:42:45
【问题描述】:

我正在使用 Visual Studio 2013 和 SDL 2.0.1,由于某种原因,我收到一大堆类似以下的错误:

Error   2   error LNK2019: unresolved external symbol _SDL_DestroyWindow referenced in function "public: virtual __thiscall Display::~Display(void)" (??1Display@@UAE@XZ)   c:\Users\Toby\documents\visual studio 2013\Projects\OpenGLTutorialProject\OpenGLTutorialProject\Display.obj OpenGLTutorialProject

我将 SDL 链接到我的程序的步骤: - 创建了一个名为 include 的文件夹,并将 SDL/include 中的所有文件放入我项目的 include 文件夹中。 -为我的项目创建一个lib文件夹,并将SDL/lib中的所有内容放入其中。 - 转到 Properties -> Linker -> General -> Additional Library Directories 并将其指向我在项目中的 lib 文件夹。 - 转到 Properties -> C/C++ -> General -> AdditionalInclude Directories 并设置我项目中包含文件夹的路径。 - 前往 Properties -> Linker -> Input-> Additional Dependencies 并输入以下内容:

glew32.lib
glew32s.lib
SDL2.lib
SDL2main.lib
SDL2test.lib
OpenGL32.lib

是的,我还包括 GLEW,它可以正常工作并提供链接。

当我输入这个时:

#include<SDL2/SDL.h>

Visual Studio 实际上为我完成了它,因此 Visual Studio 知道 SDL 存在于项目中。然而,在那之后,我尝试运行和编译,我遇到了一堆未解决的外部符号错误,然后是这样的:

Error   12  error LNK1120: 11 unresolved externals  c:\users\toby\documents\visual studio 2013\Projects\OpenGLTutorialProject\Debug\OpenGLTutorialProject.exe   OpenGLTutorialProject

我搜索了一下,似乎 SDL 曾经在使用 Visual Studio 2013 时遇到过问题,但后来这些错误都被解决了。我还确保像这样设置我的主要方法:

int main(int argc, char **argv)

因为我听说 SDL 对 main 方法中的参数很挑剔。谁能告诉我我做错了什么?

【问题讨论】:

  • 非常感谢您的帮助...
  • 顺便说一句,您不应该将glew32.libglew32s.lib 都作为软件的依赖项。一个(glew32)是DLL导入库,另一个是静态的(glew32s)。如果您在包含glew.h 之前#define GLEW_STATIC(我建议您这样做,因为 DLL 版本不提供任何真正的好处)链接到 glew32s.lib,否则链接到 glew32.lib 并记住将 GLEW DLL 与您的软件一起分发.
  • 对不起,我刚开始学习我找到的教程。老实说,我对 C++ 很陌生,虽然对编程并不陌生 @AndonM.Coleman

标签: c++ opengl sdl visual-studio-2013


【解决方案1】:

我的猜测是,您要么使用了不正确的路径,要么针对所选平台链接了错误版本的库?即 x86 还是 x64?

如果您的编译器设置为 32 位,您需要使用 x86 库而不是 x64。

另外,Additional Library Directories 需要指向 lib 文件所在的目录,在 SDL2 中 lib 目录有两个子目录,分别为 x86 和 x64。如果您从 SDL lib 目录中复制了所有内容,这些文件可能最终会出现在不应该出现的位置。

【讨论】:

  • 我只复制了 x64 版本的文件,所以这不是问题。我怎样才能知道我有什么类型的编译器?我使用 Visual Studio(显然),并且我在 x64 计算机上。这是否意味着我有一个 x64 编译器?
  • @opiop65 你在配置管理器中设置了 VS 以使用 X64 配置吗?如果我没记错的话,它默认为 x86 (Win32)。目标平台与您的操作系统版本无关,VS 可以为 X64 和 X86 编译,并且您的计算机可以同时运行这两者。尝试更改为 lib 目录中的 X86 SDL 库,您很可能会没事。
  • 这就是我要找的答案!我必须切换到 x86 DLL,并且必须删除静态 GLEW DLL!之后一切正常,谢谢!
  • @opiop65 很高兴为您提供帮助 :)
  • 嗯...我在这里遇到了麻烦。当我尝试使用 x86 SDL2.lib 文件时,编译器会打印出未解决的符号错误。但是当我使用x64版本的.lib文件时,它编译了,但是没有运行……x86版本有bug吗?
猜你喜欢
  • 2015-02-23
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 2016-07-09
  • 2014-01-09
  • 2014-07-15
相关资源
最近更新 更多