在VS2015中的SDL2.0开发环境搭建
写本文的目的在于使用网络上的教程及官方的教程(如:http://www.willusher.io/sdl2%20tutorials/2013/08/15/lesson-0-visual-studio)时,编译时都会有错误:
Error LNK2019 unresolved external symbol SDL_main referenced in function main_utf8
如果您要解决这个错误直接看测试一节。
对于新手来讲,还没有入门就是一个大大的打击。枫竹梦使用的是VS2015 Community版本,操作系统win7 x64。
下载SDL2.0
新建项目并配置
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.cpp
5. 在VS中右键项目SDLtest01,选择[属性],在上方配置选择所有配置,因为这样对Debug和Release同时进行了设置,平台选择x64。如果您目标对象为Win32,请选择Win32,注意第4步中也需要使用lib/x86下的lib文件。需要配置的地方有3个,包含目录,lib文件和具体的lib文件。
测试
#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函数的方式来练习就可以,也就是第一种方式。
总结
/**
* \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 <===========
*/很清楚,如果提供自己的main函数,定义这个宏就可以了。然后接口往下看,
/**
* \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开发环境搭建的更多相关文章
- android 5.0开发环境搭建
Android 5.0 是 Google 于 2014 年 10 月 15 日发布的全新 Android 操作系统.本文将就最新的Android 5.0 开发环境搭建做详细介绍. 工具/原料 jdk- ...
- Hadoop-2.8.0 开发环境搭建(Mac)
Hadoop是一个由Apache基金会开发的分布式系统架构,简称HDFS,具有高容错性.可伸缩性等特点,并且可以部署在低配置的硬件上:同时,提供了高吞吐量的数据访问性能,适用于超大数据集的应用程序,以 ...
- IMX6开发板Qtopia2.2.0开发环境搭建以及编译镜像
搭建 Qtopia2.2.0 开发环境,需要先搭建 Android 的编译环境,然后在 Android 编译环境的基础上,再搭建 Qtopia2.2.0 编译环境.以下内容基于迅为-iMX6开发板.Q ...
- CC++初学者编程教程(2) Microsoft Visual C++ 6.0开发环境搭建
上一篇演示的是如何安装VS2010,本文演示的是如何安装Microsoft Visual C++ 6.0 简称VC6. 有同学经常VC6都是很古董的版本了,为啥他还存在,不得不说VC6是微软一个很经典 ...
- Cocos2d-x.3.0开发环境搭建
配置:win7 + VS2012 + Cocos2d-x.3.0 + Cocos Studio v1.4.0.1 前言:本文介绍在上述配置下进行游戏开发的环境搭建.开发语言为C++.如果读者不需要查看 ...
- AndroidStudio2.0开发环境搭建
实验内容 下载安装Android Studio 配置使用环境 实验要求 下载安装Android Studio 基本环境配置 实验步骤 1.首先从安卓开发者网站下载最新的Android Studio h ...
- MongoDB 4.0 开发环境搭建集群
环境准备 Liunx 服务器一台 以下示例为单机版安装集群, 没有分片 MongoDB 安装 1.下载 MongoDB tgz 安装包: 可以从下载中心下载: https://www.mongodb. ...
- ubuntu16.04 HyperLedger Fabric 1.2.0 开发环境搭建
安装准备 1. 安装git.cRUL.gcc/g++和make $ sudo apt-get update $ sudo apt-get install build-essential git cur ...
- Cocos2d-x.3.0开发环境搭建之—— 极简式环境搭建
配置:win7 + VS2012 + Cocos2d-x.3.0 + Cocos Studio v1.4.0.1 使用此法可以方便的创建Cocos2d-x项目.如果需要运行Cocos2d-x引擎自带的 ...
随机推荐
- poor-pigs(非常好的思路)
https://leetcode.com/problems/poor-pigs/ package com.company; class Solution { // 下面第二种做法貌似是OJ原来的做法, ...
- Android 使用内置的Camera应用程序捕获图像
本Demo的实现效果是调用手机上已安装的照相机来实现拍照的功能,拍好的照片以ImageView形式展示. 目的:学习手机调用安装的相机照相,对大的图片处理有所认识,这里主要用到BitmapFactor ...
- webstrom 代码工具(转http://www.cnblogs.com/tangdanni11/p/5149063.html)
Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来生成代码,大大提高了HTML/CSS代码编写的速度,比如下面的演示: ...
- Oracle创建自增字段和修改方法-ORACLE SEQUENCE的简单介绍
http://blog.csdn.net/zhoufoxcn/article/details/1762351先假设有这么一个表: create table S_Depart ( DepartI ...
- 关于meta标签的name="viewport" 概述
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scal ...
- MVC初了解
MVC:Model-View-Controller,将数据和显示形式分离. Model:能够看做是三层中的D层+B层,实现业务逻辑和与数据库的交互. View:看做是U层,用来显示数据. Contro ...
- mac 升级系统后 ”任何来源“被取消了找回方法
找回方法 终端输入: sudo spctl --master-disable
- rtems 4.11 console驱动 (arm, beagle)
console驱动框架主要文件是 c/src/lib/libbsp/shared/console.c,驱动的入口是 console_initialize()主要作用是初始化BSP提供的全局变量 Con ...
- HDFS源码分析数据块复制之PendingReplicationBlocks
PendingReplicationBlocks实现了所有正在复制的数据块的记账工作.它实现以下三个主要功能: 1.记录此时正在复制的块: 2.一种对复制请求进行跟踪的粗粒度计时器: 3.一个定期识别 ...
- C语言序列点问题总结(大多数高等教育C语言教学课程的漏洞)
C语言序列点总结 2013年11月21于浙大华家池 C 语言副作用: (side effect)是指对数据对象或者文件的修改. 例如,语句 v = 99;的副作用是把 v 的值修改成 99. C语言序 ...