SDL学习(001):走好第一步——VS2017中的基本设置

  • Post author:
  • Post category:其他


一、进入

SDL官网

下载SDL2.0 Development Library(Visual C++ 32/64bit)。因为Development Library里已经包含了对应的Runtime Binary,所以不需要再单独下载Rumtime Binary。

二、解压刚刚下载的文件:“SDL2-devel-2.0.5-VC.zip”到指定文件夹,如“D:\SDL2-devel-2.0.5-VC”。

三、打开VS2017,依次点击“文件”->“新建”->“项目”->“Visual C++”->“空项目“(可以自定义项目名称及路径,名称默认为“Project1”)-> ”确定“。

四、在左侧“解决方案资源管理器”中,找到刚刚建立的项目“Project1”,双击展开。在展开的列表中找到“源文件”,右键单击“源文件”->“添加”->“新建项”->“Visual C++”->“C++ 文件(.cpp)”,更改文件名(如:“main.cpp”),单击“添加”。

五、编辑main.cpp,输入测试代码:

#include <SDL.h>

int main(int argc, char *argv[]) // main函数头必须这样写,因为SDL把main定义成了宏
{
    SDL_Delay(3000); // 让窗口在屏幕上保持3000毫秒,避免运行时窗口一闪而过
    SDL_Quit(); 
    return 0;
}

六、按Ctrl+F5编译,编译报错:

main.cpp(1): fatal error C1083: 无法打开包括文件: “SDL.h”: No such file or directory

原因:没有把SDL头文件目录添加到编译器的头文件查找路径。

解决:

1. 在左侧“解决方案资源管理器”中,右键单击刚刚建立的项目“Project1”。

2. 点击弹出的菜单中最下面的“属性”,弹出“Project1属性页”窗口。

3. 单击左侧“VC++目录”,单击右侧“包含目录”,单击该行右侧下拉箭头 ->“编辑”,弹出“包含目录”窗口。

4. 双击“包含目录”窗口最上面的空白窗格第一行,单击该行右侧按钮“…”。

5. 在弹出的资源管理器的地址栏中输入:“D:\SDL2-devel-2.0.5-VC\SDL2-2.0.5\include”(这是解压SDL得到的路径,如有需要自行修改)。

6. 单击“选择文件夹”,回到“包含目录”窗口,单击“确定”,回到“Project1属性页”窗口,单击“应用”,单击“确定”。

七、按Ctrl+F5编译,链接报错:

1>LINK : fatal error LNK1561: 必须定义入口点

原因:SDL把main定义成了宏:


#define main SDL_main


所以链接器找不到main函数,即默认的程序入口点。

解决:

1. 同第六步1,2两小步。

2. 双击左侧“链接器”,在展开列表中单击“高级”。

3. 在右侧第一行“入口点”中输入“WinMainCRTStartup”。

4. 单击“确定”。

八、按Ctrl+F5编译,链接报错:

1>main.obj : error LNK2019: 无法解析的外部符号 _SDL_Delay,该符号在函数 _SDL_main 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 _SDL_Quit,该符号在函数 _SDL_main 中被引用
1>MSVCRTD.lib(exe_winmain.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 中被引用

原因:没有链接SDL指定的静态库。

解决:

1. 在main.cpp开头插入如下两行:

#pragma comment(lib, "x86/SDL2.lib")
#pragma comment(lib, "x86/SDL2main.lib")

现在的main.cpp源码:

#pragma comment(lib, "x86/SDL2.lib")
#pragma comment(lib, "x86/SDL2main.lib")
#include <SDL.h>

int main(int argc, char *argv[]) // main函数头必须这样写,因为SDL把main定义成了宏
{
    SDL_Delay(3000); // 避免运行时窗口一闪而过,让窗口在屏幕上保持3000毫秒
    SDL_Quit(); 
    return 0;
}

2.参照第六步把“D:\SDL2-devel-2.0.5-VC\SDL2-2.0.5\include”添加到“包含目录”的步骤,把“D:\SDL2-devel-2.0.5-VC\SDL2-2.0.5\lib”添加到“库目录”。

九、按Ctrl+F5,运行报错:

由于找不到SDL2.dll,无法继续执行代码。重新安装程序可能会解决此问题。

原因:缺少SDL要求的动态链接库文件。

解决:

1. 在VS2017中左侧“解决方案资源管理器”中,右键单击项目“Project1”。

2. 在弹出的菜单中单击“在文件资源管理器中打开文件夹”。

3. 在弹出资源管理器的地址栏中输入“..\”(相对路径),进入上层目录。

4. 双击“Debug”文件夹,确认其中有“Project1.exe”,如果没有,那就是进错文件夹了。

5. 打开“D:\SDL2-devel-2.0.5-VC\SDL2-2.0.5\lib\x86”文件夹,复制其中的“SDL2.dll”到第4步中打开的“Debug”文件夹。

十、回到VS2017,按Ctrl+F5,成功运行。



版权声明:本文为tmsc123原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。