本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。
目录
- Visual Studio 2017中配置SDL
- 目录
- 配置环境&平台
- 配置步骤
- 第一步:安装Visual Studio 2017
- 第二步:下载SDL2-devel-2.0.8-VC.zip并解压
- 第三步:新建MSVS项目
- 第四步:配置SDL环境
- 第五步:测试配置环境
截至目前,最新版本的SDL是2.0.8版,这个对想用SDL_image的人很重要,因为想要导入png格式的图像时,SDL_image用到一些函数是SDL2.0.6版本及以上才有的。关于SDL的详细介绍可在SDL的官网上看到:https://www.libsdl.org/。
这步很简单,按照提示一步一步安装即可。网上也有很多教程,在此不再赘述。MSVS下载地址:https://visualstudio.microsoft.com/zh-hans/downloads/
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)
打开Visual Studio,新建一个VS项目(空项目即可),并添加main函数文件(main.cpp)。
鼠标光标至项目名称处(比如我的就是”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
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;
}