欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Visual Studio 2017中配置SDL

程序员文章站 2022-03-22 16:41:59
...

Visual Studio 2017中配置SDL

Visual Studio 2017中配置SDL
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。

目录


配置环境&平台

  • Windows 10 x64 系统
  • SDL2-devel-2.0.8-VC.zip
  • Microsoft Visual Studio 2017 Community(Community版本免费)

截至目前,最新版本的SDL是2.0.8版,这个对想用SDL_image的人很重要,因为想要导入png格式的图像时,SDL_image用到一些函数是SDL2.0.6版本及以上才有的。关于SDL的详细介绍可在SDL的官网上看到:https://www.libsdl.org/


配置步骤

第一步:安装Visual Studio 2017

这步很简单,按照提示一步一步安装即可。网上也有很多教程,在此不再赘述。MSVS下载地址:https://visualstudio.microsoft.com/zh-hans/downloads/

第二步:下载SDL2-devel-2.0.8-VC.zip并解压

SDL2-devel-2.0.8-VC.zip文件可在https://www.libsdl.org/download-2.0.php获得。Microsoft Visual Studio (MSVS) 使用的是VC++编译器,所以我们下载VC++版本的SDL:

Visual Studio 2017中配置SDL

下载好SDL包之后,把解压后的文件夹放在一个固定的目录下,方便给以后每个会用到SDL的项目搭建环境。(我的电脑没有分盘,所以放在C盘目录下: C:\SDL2-2.0.8)

第三步:新建MSVS项目

打开Visual Studio,新建一个VS项目(空项目即可),并添加main函数文件(main.cpp)。
Visual Studio 2017中配置SDL
Visual Studio 2017中配置SDL
Visual Studio 2017中配置SDL

第四步:配置SDL环境

鼠标光标至项目名称处(比如我的就是”Project2”)单击右键,打开属性窗口:
Visual Studio 2017中配置SDL

在”C++->常规->附加库目录”中添加刚才保存的SDL文件夹下的include文件夹。注意Visual Studio有Debug和Release两个模式,所以在(1)处选择“所有配置”,这样两个平台都可以使用SDL
Visual Studio 2017中配置SDL

在”链接器->常规->附加库目录”中添加刚才保存的SDL文件夹下的”lib\x86”文件夹(因为此时活动平台为32位,所以选择x86。如果需要使用64位,则选择”lib\x64”文件夹):
Visual Studio 2017中配置SDL

在“链接器->输入->附加依赖项”中添加SDL2.lib和SDL2main.lib,中间用英文分号或回车间隔:
Visual Studio 2017中配置SDL

将”lib\x86”目录下的SDL2.dll复制粘贴到和main.cpp相同(即Project2.vcxproj,Project2.vcxproj.filters和Project2.vcxproj.user相同)的目录下。同样要注意x86和x64要分别对应,如果是配置x64平台则复制粘贴”lib\x64”下的SDL2.dll。此处选择x86:
Visual Studio 2017中配置SDL
Visual Studio 2017中配置SDL

这里有一个关于MSVS中C++项目类型的说明:

因为我们新建的是空项目,所以“链接器->system->subsystem”这一项为空。如果此时直接执行第五步,会出现如下错误(即找不到接入点):

1>------ Build started: Project: Project2, Configuration: Debug Win32 ------
1>LINK : fatal error LNK1561: entry point must be defined
1>Done building project "Project2.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

如果选择的是Win32控制台应用项目,此项值为“Console”,如果选择的是windows桌面应用项目,此项值为“Windows”。为了解决这个问题,这两个值选一个即可,我的习惯是选择Console。如果一开始新建的是这两个项目,可以跳过这一步。我们一开始选空项目的原因是,所有文件和环境配置都可以由我自己来定义,MSVS的控制台项目会自带stdafx.h文件,而且默认启用预编译头,很麻烦:
Visual Studio 2017中配置SDL

第五步:测试配置环境

此处需要注意,SDL环境需要main函数有输入的参数(即使用不到):

int main (int argc, char *argv[]) {
    ...
}

否则如果为

int main (void) {
    ...
}

int main () {
    ...
}

则会出现如下的错误:

1>------ Build started: Project: Project2, Configuration: Debug Win32 ------
1>main.cpp
1>SDL2main.lib(SDL_windows_main.obj) : error LNK2019: unresolved external symbol _SDL_main referenced in function _main_utf8
1>C:\Users\zdh\source\repos\Project2\Debug\Project2.exe : fatal error LNK1120: 1 unresolved externals
1>Done building project "Project2.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

现在进行测试。测试代码来自https://wiki.libsdl.org/SDL_CreateWindow。为了测试所有的配置,将原代码中的SDL_INIT_VIDEO改为SDL_INIT_EVERYTHING。

// Example program:
// Using SDL2 to create an application window

#include "SDL.h"
#include <stdio.h>

int main(int argc, char* argv[]) {

    SDL_Window *window;                    // Declare a pointer

    // 07-14-2018: Modified by ZDH
    // SDL_Init(SDL_INIT_VIDEO);              // Initialize SDL2
    SDL_Init(SDL_INIT_EVERYTHING);              // Initialize SDL2
                                           // Create an application window with the following settings:
    window = SDL_CreateWindow(
        "An SDL2 window",                  // window title
        SDL_WINDOWPOS_UNDEFINED,           // initial x position
        SDL_WINDOWPOS_UNDEFINED,           // initial y position
        640,                               // width, in pixels
        480,                               // height, in pixels
        SDL_WINDOW_OPENGL                  // flags - see below
    );

    // Check that the window was successfully created
    if (window == NULL) {
        // In the case that the window could not be made...
        printf("Could not create window: %s\n", SDL_GetError());
        return 1;
    }

    // The window is open: could enter program loop here (see SDL_PollEvent())

    SDL_Delay(3000);  // Pause execution for 3000 milliseconds, for example

    // Close and destroy the window
    SDL_DestroyWindow(window);

    // Clean up
    SDL_Quit();
    return 0;
}

最终运行结果显示如图,配置成功:
Visual Studio 2017中配置SDL