在VS2015中的SDL2.0开发环境搭建
2017-10-22 15:50
288 查看
写本文的目的在于使用网络上的教程及官方的教程(如:http://www.willusher.io/sdl2%20tutorials/2013/08/15/lesson-0-visual-studio)时,编译时都会有错误:
对于新手来讲,还没有入门就是一个大大的打击。枫竹梦使用的是VS2015 Community版本,操作系统win7 x64。
2. 添加一个新的文件main.cpp,并添加main函数,如果已经存在,略过新建文件。
3. 打开main.cpp所在的目录,新建目录lib。
4. 将SDL2-devel-2.0.5-VC.zip中的include目录整体复制到main.cpp所在的目录。将SDL2-devel-2.0.5-VC.zip中的lib/x64下的SDL2.lib和SDL2main.lib文件复制到新建的lib中。将SDL2.dll复制到main.cpp所在的目录。具体结构如下:
5.1 选择 配置属性->C/C++->通用,在右侧编辑附加包含目录,添加include目录。
![](http://img.blog.csdn.net/20170103105600483?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnVyem9vbQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
5.2 选择 配置属性->链接器->通用,在右侧编辑附加库目录,添加lib目录。
![](http://img.blog.csdn.net/20170103105921207?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnVyem9vbQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
5.3 选择 配置属性->链接器->输入,在右侧编辑附加依赖 项,添加SDL2.lib和SDL2main.lib目录。
![](http://img.blog.csdn.net/20170103105931374?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnVyem9vbQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
到此已经配置完成。
SDL提供了两种方式来使用,其一是使用自己的main函数,但是需要告诉SDL。方式就是定义宏SDL_MAIN_HANDLED。具体代码如下:
第二种方式,使用SDL提供的main函数,这也是默认的方式,但此时用户需要提供一个入口函数SDL_main的实现,其原型为:
需要我们提供一个实现:
对于刚入门来讲使用自己定义的main函数的方式来练习就可以,也就是第一种方式。
首先错误提示表示,main_utf8中调用了SDL_main,但是SDL_main没有定义,那就是搜索一下,很容易定位在SDL_main.h文件。
很清楚,如果提供自己的main函数,定义这个宏就可以了。然后接口往下看,[/code]
欢迎交流更多的问题。
Error LNK2019 unresolved external symbol SDL_main referenced in function main_utf8如果您要解决这个错误直接看测试一节。
对于新手来讲,还没有入门就是一个大大的打击。枫竹梦使用的是VS2015 Community版本,操作系统win7 x64。
下载SDL2.0
先到官网下载SDL2.0,http://www.libsdl.org/download-2.0.php,写本文是最新的版本为2.0.5。需要下载开发包。具体为Development Libraries:下的Visual C++ 32/64-bit,SDL2-devel-2.0.5-VC.zip。下载的编译版本一定要与使用的一致。新建项目并配置
1. 在VS中新建一个Win32 Console的项目,如SDLtest01。新建Console项目的目的是方便输出一些高度信息而已。2. 添加一个新的文件main.cpp,并添加main函数,如果已经存在,略过新建文件。
3. 打开main.cpp所在的目录,新建目录lib。
4. 将SDL2-devel-2.0.5-VC.zip中的include目录整体复制到main.cpp所在的目录。将SDL2-devel-2.0.5-VC.zip中的lib/x64下的SDL2.lib和SDL2main.lib文件复制到新建的lib中。将SDL2.dll复制到main.cpp所在的目录。具体结构如下:
SDLtest01/ lib/ SDL2.lib SDL2main.lib include/ SDL_XXX.h ... SDL2.dll main.cpp5. 在VS中右键项目SDLtest01,选择[属性],在上方配置选择所有配置,因为这样对Debug和Release同时进行了设置,平台选择x64。如果您目标对象为Win32,请选择Win32,注意第4步中也需要使用lib/x86下的lib文件。需要配置的地方有3个,包含目录,lib文件和具体的lib文件。
5.1 选择 配置属性->C/C++->通用,在右侧编辑附加包含目录,添加include目录。
5.2 选择 配置属性->链接器->通用,在右侧编辑附加库目录,添加lib目录。
5.3 选择 配置属性->链接器->输入,在右侧编辑附加依赖 项,添加SDL2.lib和SDL2main.lib目录。
到此已经配置完成。
测试
修改mian.cpp文件如下:#include <iostream> #include <SDL.h> int main() { if (SDL_Init(SDL_INIT_VIDEO) != 0) { std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl; return 1; } SDL_Quit(); return 0; }一般教程都是这样的来配置,生成项目,会提示如下错误:
Error LNK2019 unresolved external symbol SDL_main referenced in function main_utf8
SDL提供了两种方式来使用,其一是使用自己的main函数,但是需要告诉SDL。方式就是定义宏SDL_MAIN_HANDLED。具体代码如下:
#include <iostream> #define SDL_MAIN_HANDLED #include <SDL.h> int main() { if (SDL_Init(SDL_INIT_VIDEO) != 0) { std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl; return 1; } SDL_Quit(); return 0; }
第二种方式,使用SDL提供的main函数,这也是默认的方式,但此时用户需要提供一个入口函数SDL_main的实现,其原型为:
int SDL_main(int argc, char *argv[]);
需要我们提供一个实现:
#include <iostream> #define SDL_MAIN_HANDLED #include <SDL.h> int SDL_main(int argc, char *argv[]) { if (SDL_Init(SDL_INIT_VIDEO) != 0) { std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl; return 1; } SDL_Quit(); return 0; }
对于刚入门来讲使用自己定义的main函数的方式来练习就可以,也就是第一种方式。
总结
其实遇到这种问题,解决的思路是什么呢?首先错误提示表示,main_utf8中调用了SDL_main,但是SDL_main没有定义,那就是搜索一下,很容易定位在SDL_main.h文件。
/** * \file SDL_main.h * * Redefine main() on some platforms so that it is called by SDL. * */#ifndef SDL_MAIN_HANDLED #if defined(__WIN32__) /* On Windows SDL provides WinMain(), which parses the command line and passes the arguments to your main function. If you provide your own WinMain(), you may define SDL_MAIN_HANDLED <=========== */
[code]
很清楚,如果提供自己的main函数,定义这个宏就可以了。然后接口往下看,[/code]
/** * \file SDL_main.h * * The application's main() function must be called with C linkage, * and should be declared like this: * \code * #ifdef __cplusplus * extern "C" * #endif * int main(int argc, char *argv[]) * { * } * \endcode */ #if defined(SDL_MAIN_NEEDED) || defined(SDL_MAIN_AVAILABLE) #define main SDL_main #endif /** * The prototype for the application's main() function */ extern C_LINKAGE int SDL_main(int argc, char *argv[]);首先,如果是自己定义的main函数,那么需要定义成
int main(int argc, char *argv[]);而不能使用诸如:
void main(); int main(); ...
欢迎交流更多的问题。
相关文章推荐
- 在VS2015中的SDL2.0开发环境搭建
- SDL2.0的VS开发环境搭建
- win 10 mobile VS2015 开发环境搭建【App开发】
- VS2013下SDL开发环境搭建
- Windows10+VS 2015上搭建MPI开发环境
- VisualStudio工程设置(二)---opencv3.2在vs2015开发环境搭建+cmake3.8编译生成opencv x86版本库
- cocos2d-x + vs2015 android游戏开发环境搭建 及 新建项目
- VS2015+QT5+OpenCV3开发环境搭建
- vs2015-Cordova开发安卓应用环境搭建
- Windows7下使用VS2015搭建Lua开发环境
- CEF + VS2015开发环境搭建
- vs2015 +wdk10 +WIN10 +VMWARE12 驱动开发环境搭建
- win7 VS2013下搭建opengl es 2.0开发环境
- WIN10 + VS2015 + WDK10 + SDK10 + VM虚拟机驱动开发调试环境搭建
- OpenCV开发环境搭建:VS2015+OpenCV3.1.0
- VS2015 搭建 Asp.net core 开发环境
- opencv3.2在vs2015开发环境搭建+cmake3.8编译生成opencv x86版本库
- Windows7下使用VS2015搭建Lua开发环境
- VS2015+WDK10+Win7 64开发环境搭建中遇到的坑
- VS2015 搭建Asp.net core开发环境的方法