怎样在Windows和Linux下写相同的代码


目前,Linux在国内受到了越来越多的业内人士和用户的青睐。相信在不久的将来,在国内为Linux开发 的应用软件将会有很大的增加(这不,金山正在招兵买马移植WPS呢)。由于未来将会是WindowsLinux两强鼎立的格局,怎样能够使得开发的软件保持最大的可移植性就成了一个很重要的问题。小弟经过一段时间的摸索,找到了这个问题的圆满解答。
Linux下,所有的开发工具和库都属于自由软件,可以免费获得并且功能强大。如果这些工具和库都有相应的Windows版,那么我们就能够在WindowsLinux下保持完全一致的开发环境。幸运的是这些工具和库都已经有了Windows版本。它们是:
1
Windows版的gccMinGWMinimalist GNU For Windows
MinGW
gccWin32版本,包括gccg++g77gdbmake及各种为MinGW移植的GNU软件。最新版的 MinGWWIN32 API包括进来,具备了开发Windows软件的所有功能。它可以编译Win32应用程序,生成dll,还可以从dll产生import lib,从而使用已有的其它编译器生成的dll。与另一套Win32版的GNU开发工具Cygwin 不同的是,MinGW编译的程序并不需要另外的dll的支持,而是直接使用Windows提供的crtdll.dll(所有的 Windows版本)或者msvcrt.dll(较新的Win95/98NT4)。因此执行效率得到了很大的提高,并且保证了线程安全,而Cygwin不是线程安全的。
MinGW
的主页在:http://www.mingw.org
MinGW
用的OpenGL库:http://www.cim.pe.u-tokyo.ac.jp/%7Ekawachi/software/cygwin_glut-e.html
MinGW移植的GNU软件:(包括bisonflexshgawksedgrepm4lessbzip2ls等等)
ftp://ftp.franken.de/pub/win32/develop/gnuwin32/mingw32/porters/Mikey/
2
Windows版的GTK
目前,在Linux下最流行的WidgetGTK(包括GDB/GDK/GTK+)已经被移植到Windows下,使得用GTK编写的程序几乎不用做任何修改就可以移植到Windows下。这样,就可以在WindowsLinux下使用同样的代码写出源码相同,界面也完全相同的GUI程序。
GTK for WIN32
的主页在:http://user.sgic.fi/~tml/gimp/win32/
3
、跨平台的多媒体开发库:SDLSimple DirectMedia Layer
SDL
是一套用来进行游戏开发的多媒体开发库,与其它多媒体开发库相比最大的优点是它是自由软件,并且可同时用于Linux(还有其它的UNIX)和Windows。通过调用SDLAPI使得我们可以在WindowsLinux下开发出代码完全相同的多媒体应用程序。目前已经有很多人在用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下,将该目录下的includelib目录全部拷到
C:/gcc-2.95.2/i386-mingw32msvc
下,将lib中所有的.dll拷到C:/Windows/System下。然后删除原目录。
解压缩glib-dev-20000215.zipgtk+-dev-20000215.zipextralibs-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下,将该目录下的includelib目录全部拷到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
因此你可以使用上述工具写任何自由的或商业的软件。

 

1.1    编译器运行操作系统

l        WINDOWS :  _WIN32、WIN32;

l        UNIX/LINUX:  unix、__unix、__unix__; 

l        SunOS/SOLARIS: __SVR4、__svr4__、sun、__sun、__sun__、sparc、__sparc、__sparc__; 

l        HPUX: __hppa、__hppa__、__hpux、__hpux__、_HPUX_SOURCE; 

l        AIX: _AIX、_AIX32、_AIX41、_AIX43、_AIX51、_AIX52; 

l        LINUX: linux、__linux、__linux__、__gnu_linux__;

l        CPU: __x86_64、__x86_64__(Intel); __amd64、__amd64__(AMD); sparc、  __sparc、__sparc__;


 1.2    编译器信息

l        __STDC__: ANSI C标志,值为1,说明兼容ANSI C标准;

l        __GNUC__: GCC编译器编预定义宏;__GNUC__的值表示GCC版本号;

l        __GNUC_MINOR__: GCC次版本号;

l        __GNUC_PATCHLEVEL__: GCC编译器修订版本号,l    

l        __GLIBC_MINOR__: glib的次版本号;

l        VC++的版本宏:

l           Visual Studio 5.0  --> VC++5.0 _MSC_VER = 1100

l           Visual Studio 6.0  --> VC++6.0 _MSC_VER = 1200

l           Visual Studio 2002 --> VC++7.0 _MSC_VER = 1300

l           Visual Studio 2003 --> VC++7.1 _MSC_VER = 1310

l           Visual Studio 2005 --> VC++8.0 _MSC_VER = 1400

l           Visual Studio 2008 --> VC++9.0 _MSC_VER = 1500

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值