1. 主页 > vs安装问题 > VS2017安装问题 >

Visual Studio 2017中配置SDL

Visual Studio 2017中配置SDL

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

目录

  • Visual Studio 2017中配置SDL
    • 目录
    • 配置环境&平台
    • 配置步骤
      • 第一步:安装Visual Studio 2017
      • 第二步:下载SDL2-devel-2.0.8-VC.zip并解压
      • 第三步:新建MSVS项目
      • 第四步:配置SDL环境
      • 第五步:测试配置环境


配置环境&平台

  • 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:

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

第三步:新建MSVS项目

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


第四步:配置SDL环境

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

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

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

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

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

这里有一个关于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文件,而且默认启用预编译头,很麻烦:

第五步:测试配置环境

此处需要注意,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;
}

最终运行结果显示如图,配置成功:

本文由VS软件圈(vssoft.net)发布,不代表VS软件圈立场,转载联系作者并注明出处:https://vssoft.net/vsazwt/VS2017anzhuangwenti/2020/0725/4798.html

联系我们

在线咨询:点击这里给我发消息

微信号:PREEE8

工作日:9:30-18:30,节假日休息