编译器找不到 SDL2 类。如何正确包含和链接它们?



我刚刚开始尝试c++。我下载了这个简单的直升机游戏,我试图编译它,但我不知道如何正确地包含和链接SDL2依赖项。

我的第一个方法是尝试用gcc编译它。我得到以下命令:

gcc main.cpp ^
-I C:codeSDL2SDL2-2.0.22include ^
-I C:codeSDL2SDL2_image-2.0.5include ^
-I C:codeSDL2SDL2_mixer-2.0.4include ^
-I C:codeSDL2SDL2_ttf-2.0.18include ^
-L C:codeSDL2SDL2-2.0.22libx64 ^
-L C:codeSDL2SDL2_image-2.0.5libx64 ^
-L C:codeSDL2SDL2_mixer-2.0.4libx64 ^
-L C:codeSDL2SDL2_ttf-2.0.18libx64

但是编译器抱怨不能从SDL2库中找到类和函数。例如,它给出的众多错误中的第一个是

In file included from heli.h:4:0,
from main.cpp:7:
loader.h: In function 'SDL_Surface* load_image(std::__cxx11::string, int)':
loader.h:27:57: error: 'SDL_DisplayFormat' was not declared in this scope
optimizedImage = SDL_DisplayFormat( loadedImage );

然后我尝试将代码库转换为Visual Studio项目,并按照本教程进行配置,基本上具有以下配置:

  • 包括目录:

    C: SDL2 SDL2-2.0.22 代码包括:C: SDL2 SDL2_image-2.0.5 代码包括:C: SDL2 SDL2_mixer-2.0.4 代码包括:C: SDL2 SDL2_ttf-2.0.18 代码包括:美元(IncludePath)

  • 图书馆目录:
  • C: SDL2 SDL2-2.0.22 lib x64代码;C: SDL2 SDL2_image-2.0.5 lib x64代码;C: SDL2 SDL2_mixer-2.0.4 lib x64代码;C: SDL2 SDL2_ttf-2.0.18 lib x64代码;美元(LibraryPath)

  • 链接器/输入/额外的依赖关系:

    SDL2.lib; SDL2main.lib; SDL2_image.lib SDL2_mixer.lib; SDL2_ttf.lib; % (AdditionalDependencies)

但后来我得到了完全相同的缺失依赖项,作为'标识符'foo'未找到';或'bar':未声明的标识符。关于包含和链接c++依赖项,我错过了什么?

  1. 游戏的源代码引用的是SDL而不是SDL2。自版本1以来,函数名或实现可能已经更改。事实上,如果您下载SDL和SDL2并查找这两个版本中的SDL_video.h文件,您将看到SDL_DisplayFormat在版本1的SDL_video头文件中,而不在版本2中。

  2. 至于包含过程,最好的方法是在您正在使用的IDE中设置它。例如,在Visual Studio中,您可以通过在"解决方案属性"中添加目录来实现这一点。通用属性->C/c++→所有选项->附加包含目录。否则,我相信您需要知道正确的包含顺序,否则gcc会抱怨。看看下面的讨论:为什么库的链接顺序有时会在GCC中导致错误?

最新更新