Windows 版 (精华区)

发信人: cliff (狗皮膏藥), 信区: Windows
标  题: HOWTO:怎样在Windows和Linux下写相同的代码 (转载)
发信站: 哈工大紫丁香 (2001年04月29日10:54:57 星期天), 转信

【 以下文字转载自 Linux 讨论区 】
【 原文由 cliff 所发表 】
目前,Linux在国内受到了越来越多的业内人士和用户的青睐。相信在不久的将来
,在国内为Linux开发的应用软件将会有很大的增加(这不,金山正在招兵买马移
植WPS呢)。由于未来将会是Windows和Linux两强相争的格局,怎样能够使得开发
的软件保持最大的可移植性就成了一个很重要的问题。小弟经过一段时间的摸索,
找到了这个问题的圆满解答。 

在Linux下,所有的开发工具和库都属于自由软件,可以免费获得并且功能强大。
如果这些工具和库都有相应的Windows版,那么我们就能够在Windows和Linux下保
持完全一致的开发环境。幸运的是这些工具和库都已经有了Windows版本。它们是
: 

1、Windows版的gcc:MinGW(Minimalist GNU For Windows) 
MinGW是gcc的Win32版本,包括gcc、g++、g77、gdb、make及各种为MinGW移植的
GNU软件。最新版的MinGW将WIN32 API包括进来,具备了开发Windows软件的所有功
能。它可以编译Win32应用程序,生成dll,还可以从dll产生import lib,从而使
用已有的其它编译器生成的dll。与另一套Win32版的GNU开发工具Cygwin不同的是
,MinGW编译的程序并不需要另外的dll的支持,而是直接使用Windows提供的
crtdll.dll(所有的Windows版本)或者msvcrt.dll(较新的Win95/98,NT4)。因
此执行效率得到了很大的提高,并且保证了线程安全,而Cygwin不是线程安全的。
 

MinGW的主页在:http://www.mingw.org 
MinGW用的OpenGL库:http://www.cim.pe.u-tokyo.ac.
jp/%7Ekawachi/software/cygwin_glut-e.html 
为MinGW移植的GNU软件:(包括bison、flex、sh、gawk、sed、grep、m4、less、
bzip2、ls等等) 
ftp://ftp.franken.de/pub/win32/develop/gnuwin32/mingw32/porters/Mikey/ 



2、Windows版的GTK: 
目前,在Linux下最流行的Widget库GTK(包括GDB/GDK/GTK+)已经被移植到
Windows下,使得用GTK编写的程序几乎不用做任何修改就可以移植到Windows下。
这样,就可以在Windows和Linux下使用同样的代码写出源码相同,界面也完全相同
的GUI程序。 

GTK for WIN32的主页在:http://user.sgic.fi/~tml/gimp/win32/ 


3、跨平台的多媒体开发库:SDL(Simple DirectMedia Layer) 
SDL是一套用来进行游戏开发的多媒体开发库,与其它多媒体开发库相比最大的优
点是它是自由软件,并且可同时用于Linux(还有其它的UNIX)和Windows。通过调
用SDL的API使得我们可以在Windows和Linux下开发出代码完全相同的多媒体应用程
序。目前已经有很多人在用SDL写程序和移植游戏了,其中比较有名是Linux下的
VCD播放软件MTV。 

SDL的主页在:http://www.devolution.com/~slouken/SDL 


4、Linux版的OpenGL库: 
Linux下的OpenGL库中最好的当然是Mesa了,您还不知道Mesa吗? 

Mesa的主页在:http://www.mesa3d.org/ 


实战演练: 

1、首先,下载以下软件: 

ftp://ftp.nanotech.wisc.edu/pub/khan/gnu-win32/mingw32/gcc-2.95.
2/gcc-2.95.2-msvcrt.exe 
http://www.cim.pe.u-tokyo.ac.jp/%7Ekawachi/software/glut-cygwin.zip 
http://user.sgic.fi/~tml/gimp/win32/glib-dev-20000215.zip 
http://user.sgic.fi/~tml/gimp/win32/gtk+-dev-20000215.zip 
http://user.sgic.fi/~tml/gimp/win32/extralibs-dev-20000201.zip 
http://www.devolution.com/~slouken/SDL/release/SDL-devel-1.1.1-mingw32.
tar.gz 
http://www.devolution.com/~slouken/SDL/release/SDL-1.1.1-1.i386.rpm 
http://www.devolution.com/~slouken/SDL/release/SDL-devel-1.1.1-1.i386.
rpm 
ftp://www.mesa3d.org/mesa/MesaLib-3.1.tar.gz 
ftp://www.mesa3d.org/mesa/MesaDemos-3.1.tar.gz 
http://www.devolution.
com/~slouken/SDL/projects/gtk-demo/src/gtk-demo-1.0.tar.gz 
http://www.devolution.com/~slouken/SDL/opengl/OpenGL-intro-1.0.0.zip 

2、安装软件: 

安装gcc-2.95.2,假定安装在 C:\gcc-2.95.2。 

解压缩glut-cygwin.zip,假定在 C:\glut-cygwin下,将该目录下的include和
lib目录全部拷到C:\gcc-2.95.2\i386-mingw32msvc下,将lib中所有的.dll拷到
C:\Windows\System下。然后删除原目录。 

解压缩glib-dev-20000215.zip、gtk+-dev-20000215.zip、
extralibs-dev-20000201.zip,假定都在C:\src下,将其改名为C:\gtk。将其目录
下的所有.dll拷到C:\Windows\System下。 

解压缩SDL-devel-1.1.1-ming32.tar.gz,假定在C:\SDL-1.1.1下,将其中的test
目录移到C:\work下,并改名为sdl。另有一个文件i386-mingw32.tar.gz,将其解
压缩,假定在C:\i386-mingw32下,将该目录下的include和lib目录全部拷到C:
\gcc-2.95.2\i386-mingw32msvc下,将lib中的SDL.dll拷到C:\Windows\System下
,然后删除原目录。 

解压缩OpenGL-intro-1.0.0.zip,假定在C:\OpenGL-intro-1.0.0下,将其移到C:
\work下并改名为opengl。 

解压缩gtk-demo-1.0.tar.gz,假定在C:\gtk-demo-1.0下,将其移到C:\work下并
改名为gtk。 

3、编辑cc.bat,内容为: 
gcc -g -Dmain=SDL_main -I/gtk/glib -I/gtk/gtk+ -I/gtk/gtk+/gdk 
-I/gcc-2.95.2/i386-mingw32msvc/include/SDL -L/gtk/glib -L/gtk/gtk+/gdk 
-L/gtk/gtk+/gtk %1 %2 %3 
-lmingw32 -lSDLmain -lSDL -luser32 -lgdi32 -lwinmm -lglib-1.3 -lgdk-1.
3 -lgtk-1.3 -lglut32 
-lglu32 -lopengl32 

将其放在任何一个现有路径下(如:C:\DOS) 

4、将路径C:\gcc-2.95.2\bin加入C:\Autoexec.bat的PATH中,重启机器。 

5、OK,现在看看你的成果吧,进入MS-DOS方式。 
cd C:\work\gtk 

编辑gtk-demo.c,将 
#include 《gdk/gdkx.h》改为 
#include 《gdk/win32/gdkwin32.h》 /* 因为这是在Win32环境下 */ 

cc -o gtk-demo gtk-demo.c 
gtk-demo 

怎么样,看到什么了?界面很土吧?可是你现在已经能够同时使用GTK和SDL在
Windows下编程了。快把《GTK入门导引》里的 helloworld.c 敲进去试试吧。 

cd C:\work\opengl 
cc -o lesson05 lesson05.c 
lesson05 

看到什么了? 是不是两个旋转的物体,好了,现在opengl也OK了。 

cd C:\work\sdl 
cc -o loopwave loopwave.c 

打开音箱, 

loopwave sample.wav 

听到什么了,是不是一段优美的爵士乐?好了,现在声音也有了。 

Well done!! 现在世界已经是你的了,Go hell Micro-soft! 从SDL的主页下载一
个quake,编译一把吧! 
怎么样?How about your feeling? 没有用一行Windows API,现在你已经可以在
Windows下写游戏了。没有使用M$的任何开发工具,全部使用自由软件,你写的程
序已经可以同时在Windows和Linux跑了。 

Go hell Micro-soft!!。 


最后,关于版权: 
不用担心什么版权问题,这些工具的版权许可如下 
MinGW:任意使用。GTK、SDL、Mesa:LGPL。 
因此你可以使用上述工具编写任何自由的或商业的软件。 


--
永远的FAQ-----www.google.com

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: cliff.hit.edu.cn]
--
※ 转载:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: cliff.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.285毫秒