随笔 - 96  文章 - 255  trackbacks - 0
<2013年3月>
242526272812
3456789
10111213141516
17181920212223
24252627282930
31123456

E-mail:zbln426@163.com QQ:85132383 长期寻找对战略游戏感兴趣的合作伙伴。

常用链接

留言簿(21)

随笔分类

随笔档案

SDL相关网站

我的个人网页

我的小游戏

资源下载

搜索

  •  

积分与排名

  • 积分 - 488870
  • 排名 - 37

最新评论

阅读排行榜

评论排行榜

作者:龙飞

3.1:MinGW 是什么?

        MinGW 提供了一套简单方便的Windows下的基于GCC 程序开发环境。MinGW 收集了一系列免费的Windows 使用的头文件和库文件;同时整合了GNU( http://www.gnu.org/ )的工具集,特别是GNU 程序开发工具,如经典gcc, g++, make等。MinGW是完全免费的自由软件,它在Windows平台上模拟了Linux下GCC的开发环境,为C++的跨平台开发提供了良好基础支持,为了在Windows下工作的程序员熟悉Linux下的C++工程组织提供了条件。

3.2:为什么使用MinGW?

        因为我和很多IT人士一样,不愿意吊死在$M这棵树上。且不说开源这个理念的伟大,仅仅就Windows的安全性也已经让人们很不安心了。如果再深入一点从编写程序来看,在C++标准尚不成熟时期产生的MFC今天看来基本上就是盖子大叔凭着个人(或许是$M公司^^)理解所使用的C++方言。在我们期盼C++0x时代到来之前,没有任何实际行动能比严格遵循C++的ISO标准更能表达我们对于C++这个伟大的哲学体系的尊重。从这个角度来说,遵循ISO标准的实现就是好的实现。所以,MinGW不会比VC差,况且,他既是开源软件家族中的一员,也是*nix平台下事实标准GCC的翻版。如果有一天我们开始使用Linux平台了,会因为今天透过MinGW所了解的GCC知识而受益。

3.3:MinGW 的下载和安装。

        MinGW的官方主页是:
http://www.mingw.org/
        你很容易找到下载的链接。下载文件是放在sourceforge上的,这也表明MinGW本身也是个在开发中的项目。
http://sourceforge.net/project/showfiles.php?group_id=2435
        下载页面上有很多令人眼花缭乱的文件,不用害怕,因为这才是软件最真实的一面。当然,这个软件的提供者为普通使用者也提供了最为简单的下载和安装方式。你只需要下载“MinGW自动下载和安装软件”(Package: Automated MinGW Installer; Release: MinGW-5.1.3)MinGW-5.1.3.exe就可以根据提示简单的安装了。并且,安装后的MinGW甚至可以通过这个文件来自动升级,非常的人性化。
        安装时需要注意以下几个方面:
1) 建议选择Current版本,Previous表示以前的版本;Candidate表示当前正在开发的版本,可能正在测试中,还不是非常稳定。
2) 在选择安装模块的时候,根据我们的需要,只需要选择以下三个:MinGW base tools, g++ compiler, MinGW Make。
3) 安装路径请选择一个容易找到的地方,默认的C:\MinGW 是不错的选择。


3.4:MinGW的简单使用。

        打开“命令提示符”(console)窗口,我们可以简单的把目录转到比如 C:\MinGW\bin 这样的位置去工作。但是这显然不是一个好的方式,因为这样一定会把bin里面搞得很混乱。所以,我们在另外一个“干净”的地方,比如 D:\Project ,把这里设置成MinGW的工程工作区。这样,我们需要在系统的path里面添加能找到bin下面*.exe文件的路径,所以做一个批处理文件是最简单的方法。我的startg++.bat文件这样写的:
@set path=C:\mingw\bin;%PATH%; 
@echo ---**欢迎使用MinGW(GCC)系统**---
@echo Update by lf426 ( E-mail: zbln426@
163.com ) 2007-12-10
@cmd 

        然后,你可以建立一个该文件的快捷方式放在桌面上,再为这个快捷方式指定一个漂亮的图标,nice!
        接下来,我们需要建立一个cpp文件,用什么来写cpp呢?

3.4.1:(插播)Vim ??


        这又是一个有着传统的“悠久”历史,很好很强大的,免费开源的,牛x文本编辑器。官方主页是:
http://www.vim.org/
        不用怀疑,你可以很容易的下载Vim的安装程序,并且很容易的安装,不需要任何的“破解”-_-!!
        因为Vim很好很强大,所以,太多的内容就留给包括我自己在内的大家自己去学了(我的逻辑Orz)。我们这里简单的只需要了解如下几点:
1) 建立一个名为 abc.def 的文本文件,在console窗口下输入:
vim abc.def
你就进入了vim的编辑界面。
2) 按"i"键,就可以输入文本了。退回到编辑方式,按Esc,再进入插入方式,再按i,就这样...
3) vim在编辑方式下本来的光标移动是h, j, k, l,不过,上下左右箭头也是可以使用的。
4) 编辑完成后,(编辑方式下)按Shift+Z两次,或者:wq就可以保存退出。使用:q!可以不保存强制退出。

3.4.2:MinGW的简单使用。(续)

        继续刚才的话题,我们建立一个叫 hello.cpp 的文件(据说Hello World是程序员的咒语...)

#include <iostream>

int main(int argc, char* argv[])
{
    std::cout 
<< "Hello World." << std::endl;
    
return 0;
}

        我们可以简单的使用命令:g++ hello.cpp,与最传统的Unix系统下的C编译器一样,MinGW为我们生成了一个名为a的可执行文件,当然,在win32下,名字叫做a.exe。
        可以使用参数 -o 来指定编译的可执行文件的名字:g++ -o hello.exe hello.cpp (或者也可以不写名exe,直接g++ -o hello hello.cpp 结果一样)。这样,得到的文件就是hello.exe。
        可以使用参数 -c 来生成与源文件名相同的目标文件:g++ -c hello.cpp ,得到的文件是hello.o 。
        目标文件可以继续连接成可执行文件:g++ hello.o ,得到文件a.exe 。
        多个源文件,目标文件和库文件都可以同时编译和连接。

3.5:获得MinGW下的SDL开发库。(Development Libraries)

        下载页面:http://www.libsdl.org/download-1.2.php
        下载:SDL-devel-1.2.13-mingw32.tar.gz (Mingw32)

3.6:为MinGW设置SDL库。

        找到你在硬盘上安装MinGW的位置,类似:
C:\MinGW
打开include文件夹,在里面建立一个新文件夹,取名为SDL,打开这个新的文件夹:
C:\MinGW\include\SDL
然后,将SDL Development Libraries中include文件夹里面的文件全部拷贝到刚才建立起来的那个新文件夹中。
然后,回到MinGW的文件夹下,打开lib文件夹:
C:\MinGW\lib
将SDL Development Libraries中lib文件夹下的libSDL.dll.a, libSDL.la和libSDLmain.a三个文件拷贝到刚才的那个MinGW的lib文件夹下。
最后,把SDL Development Libraries中lib文件夹下的SDL.dll文件拷贝到
C:\WINDOWS\system32
下。当然,另外一个选择是将SDL.dll随时绑定到使用了SDL库编译的*.exe文件所在的文件夹中。这通常在发布你的程序的时候使用。

3.7:建立第一个SDL程序。

运行我们之前的那个startg++.bat 文件,打开console窗口,执行命令:vim main.cpp ,将下列代码写入并保存。

#include <iostream>
#include 
"SDL/SDL.h"

int main(int argc, char* argv[])
{
    
try {
        
if ( SDL_Init(SDL_INIT_EVERYTHING) == -1 )
            
throw "Could not initialize SDL!";
    }
    
catch ( const char* s ) {
        std::cerr 
<< s << std::endl;
        
return -1;
    }
    std::cout 
<< "SDL initialized.\n";
    SDL_Quit();

    
return 0;
}
执行g++命令:g++ -o MySDL.exe main.cpp -lmingw32 -lSDLmain -lSDL
参数 -l (小写的L)使库文件得以与源文件一起编译和连接。(简单的可以认为-labc即连接了名称符合libabc.*的所有库文件)
最后说明的两个参数是:-mconsole 和 -mwindows
他们的效果是使可执行程序是带命令行控制窗口的或者是纯Windows窗口的,缺省情况下应该是带命令行控制窗口的。
运行mysdl.exe可以看到文件的执行情况。
posted on 2008-02-01 01:19 lf426 阅读(18811) 评论(10)  编辑 收藏 引用 所属分类: SDL入门教程

FeedBack:
# re: SDL入门教程(一):3、MinGW 下的安装与设置  2008-06-05 16:41 btest
为什么我照上面的代码编写,console没有任何输出。然后去除SDL部分,console就能正常输出?  回复  更多评论
  
# re: SDL入门教程(一):3、MinGW 下的安装与设置 [未登录] 2008-06-06 18:12 lf426
MinGW的标准输出(std::cout & std::cerr)是在一个叫stdout.txt的文本文件中。  回复  更多评论
  
# re: SDL入门教程(一):3、MinGW 下的安装与设置 [未登录] 2008-09-12 09:48 伊凡
照做了,g++编译出错,找不到SDL_Init和SDL_Quit
我已经把它们加到include里出了啊。。。
同时头文件引用也是"SDL/SDL.H"
错误提示如下:
I:\MinGW Progect>g++ -o main main.cpp
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc5wptK9.o:main.cpp:(.text+0x142): undefined
reference to `SDL_Init'
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc5wptK9.o:main.cpp:(.text+0x22d): undefined
reference to `SDL_Quit'
H:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../libmingw32.a(main.o):main.c:(.tex
t+0x104): undefined reference to `WinMain@16'
collect2: ld returned 1 exit status  回复  更多评论
  
# re: SDL入门教程(一):3、MinGW 下的安装与设置  2008-09-14 18:35 wintry
@伊凡
I:\MinGW Progect>g++ -o main main.cpp
你编译时少加上连接库一起编译:
I:\MinGW Progect>g++ -o main.exe main.cpp -lmingw32 -lSDLmain -lSDL

  回复  更多评论
  
# re: SDL入门教程(一):3、MinGW 下的安装与设置 [未登录] 2008-09-15 08:19 伊凡
抱歉……最后那行我没仔细看。。。
作者写的很清楚啊。。。
谢谢上面这位朋友wintry  回复  更多评论
  
# re: SDL入门教程(一):3、MinGW 下的安装与设置 [未登录] 2010-11-03 10:10 a
为什么hello.cpp就能从控制台输出,而main.cpp就不行.  回复  更多评论
  
# re: SDL入门教程(一):3、MinGW 下的安装与设置  2010-12-10 16:11 yj2005
关于安装MinGw的问题.
Input commands
>> mex -v // (在Matlab环境中)
This is mex, Copyright 1984-2007 The MathWorks, Inc.

-> Default options filename found in C:\Users\Administrator\AppData\Roaming\MathWorks\MATLAB\R2009a
----------------------------------------------------------------
-> Options file = C:\Users\Administrator\AppData\Roaming\MathWorks\MATLAB\R2009a\mexopts.bat
MATLAB = D:\PROGRA~1\Matlab
-> COMPILER = gcc
-> Compiler flags:
COMPFLAGS = -c -DMATLAB_MEX_FILE -mno-cygwin
OPTIMFLAGS = -O3
DEBUGFLAGS = -g
arguments =
Name switch = -o
-> Pre-linking commands =
-> LINKER = D:\PROGRA~1\Matlab\sys\perl\win32\bin\perl.exe d:\PROGRA~1\matlab\gnumex\linkmex.pl
-> Link directives:
LINKFLAGS = -mno-cygwin -mwindows -LC:\Users\ADMINI~1\AppData\Roaming\MATHWO~1\MATLAB\R2009a\gnumex
LINKDEBUGFLAGS = -g -Wl,--image-base,0x28000000\n
LINKFLAGSPOST =
Name directive = -o .mexw32
File link directive =
Lib. link directive =
Rsp file indicator =
-> Resource Compiler = D:\PROGRA~1\Matlab\sys\perl\win32\bin\perl.exe d:\PROGRA~1\matlab\gnumex\rccompile.pl --unix -o mexversion.res
-> Resource Linker =
----------------------------------------------------------------
Usage:
MEX [option1 ... optionN] sourcefile1 [... sourcefileN]
[objectfile1 ... objectfileN] [libraryfile1 ... libraryfileN]

or (to build an Ada S-function):
MEX [-v] [-g] -ada <sfcn>.ads

Use the -help option for more information, or consult the MATLAB API Guide.


D:\PROGRA~1\MATLAB\BIN\MEX.PL: Error: No file names given.

??? Error using ==> mex at 218
Unable to complete successfully.


复制MATLAB根目录下 extern\examples\mex\yprime.c 文件到自己的测试目录下。例如gnumex的examples目录下。
输入命令

mex yprime.c

D:\PROGRA~1\MATLAB\BIN\MEX.PL: Error: 'yprime.c' not found.

这是怎么回事呀?怎么会说:‘yprime.c‘没有找到呢?
请高手指点下。
  回复  更多评论
  
# re: SDL入门教程(一):3、MinGW 下的安装与设置  2012-07-14 20:43 g

H:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../libmingw32.a(main.o):main.c:(.tex
t+0x104): undefined reference to `WinMain@16'
怎么办  回复  更多评论
  
# re: SDL入门教程(一):3、MinGW 下的安装与设置  2012-07-14 21:12 g
@g
5. CodeBlocks/MinGW/lib/libmingw32.a(main.o):main.c|| undefined reference to `WinMain@16'
此错误出现在链接完成的最后阶段,是链接程序找不到程序的window入口点。引起此原因的的主要问题是MinGW好像只认识WinMain入口点,不认识高版本的_t WinMain入口点。_tWinMain 是基本函数。根据编译标志 _MBCS 或 _UNICODE生成 int WinMain() 或 int wWinMain()。但在MinGW编译器下,解决方法很简单,就是将_tWinMain改为WinMain()。即使使用_UNICODE标志也只用采用int WinMain()作为程序入口点,而且这样的设置程序运行正常!!
  回复  更多评论
  
# re: SDL入门教程(一):3、MinGW 下的安装与设置  2013-03-01 22:13 ohmytime
@lf426
我想问的是,stdout.txt具体在哪里?
当前目录吗?
--------------------------------------------------------
另外,我有一个程序ffmpeg.exe(版本1.1.2)依赖于SDL.dll 在控制台没有输出信息,然后我重新编译了SDL,选项有 --disable-stdio?
  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理