一、minGW使用方法

基本用法在后面给你加上了

MinGW是指只用自由软件来生成纯粹的Win32可执行文件的编译环境,它是Minimalist GNU on Windows的略称。详情请参考<;。

mingw(minGW使用方法)

这里的“纯粹”是指「使用msvcrt.dll的应用程序」。无法使用MFC(Microsoft Foundation Classes)。

MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时库。

MinGW,即 Minimalist GNU For Windows。它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC(GNU Compiler C)产生 Windows32程序。

在基本层,MinGW是一组包含文件和端口库,其功能是允许控制台模式的程序使用微软的标准C运行时间库(MSVCRT.DLL),该库在所有的 NT OS上有效,在所有的 Windows 95发行版以上的 Windows OS有效,使用基本运行时间,你可以使用 GCC写控制台模式的符合美国标准化组织(ANSI)程序,可以使用微软提供的 C运行时间扩展。该功能是 Windows32 API不具备的。下一个组成部分是 w32api包,它是一组可以使用 Windows32 API的包含文件和端口库。与基本运行时间相结合,就可以有充分的权利既使用 CRT(C Runtime)又使用 Windows32 API功能。

MinGW官方网站为

mingw(minGW使用方法)

实际上 MinGW并不是一个 C/C++编译器,而是一套 GNU工具集合。除开 GCC(GNU编译器集合)以外,MinGW还包含有一些其他的 GNU程序开发工具(比如 gawk bison等等)。

开发 MinGW是为了那些不喜欢工作在 Linux(FreeBSD)操作系统而留在 Windows的人提供一套符合 GNU的 GNU工作环境。

(此前的 cygwin虽然也是 GNU的 Windows移植,但是 cygwin是有版权的,而不是 GNU。)

所以,使用 MinGW我们就可以像在 Linux下一样使用 GNU程序开发工具。

GCC就是 MinGW的核心所在,GCC是一套支持众多计算机程序语言的编译系统,而且在语言标准的实现上是最接近于标准的。并且 GCC几乎可以移植到目前所有可用的计算机平台。(我的电脑上就还装有 DevKitPro,里面包含 GCC的 ARM(for GBA/DS/GP32)和 MIPS(for PSP)版本。)

GCC本身不像 VC那样拥有 IDE界面(在 Windows上也存在 Dev C++之类的支持 MinGW编译器的 IDE)。源代码编辑你可以选用任何你喜欢的文本编辑器(据说微软的开发人员包括 VC的开发都不用 VC所带的 IDE编辑器,而是选用 GNU的 VIM编辑器)。然后使用 make等工具来进行软件项目的编译、链接、打包乃至发布。而像 cvs(svn)源代码版本控制工具可以让世界上任何一个角落的人都可以参与到软件项目中来。

关于 MFC,微软基础库类,这个随 VC++携带的一个源代码公开的开发包,和其他 Windows程序开发包是一样的。如果有 VC++的授权,你完全可以使用 MFC的源代码,也就是你使用 GCC来编译 MFC程序是完全可以的。

当然,GNU下也很多 Windows程序开发包,甚至有一些是支持跨平台使用的。不仅仅可以直接把源代码编译为 Windows程序,也可以不经修改编译为其他操作系统的图形程序。

不过 GNU下,最流行的图形界面开发库是 GTK+。GTK+也能很好的运行在 Windows平台(比如 GIMP和 Gaim)。

总体说来,使用 MinGW就是 GNU。

基本用法:

在mingw环境中生成和使用dll都是十分方便的。

1.生成dll

gcc(g++)-shared-o test.dll test.c(test.cpp)

通过该命令生成test.dll,将导出test.c中非静态的函数和相关的类。

(注by asper:该命令行在处理jni涉及的dll时无效)

我使用微软C++编译器,cl命令对带有空格的路径也是无效的,需要用""括住

2.连接dll到exe中

mingw使用dll的方式和静态库.a的方式是一样的,连接的时候只需要加上-ltest即可,没有lib前缀的要求。

3.编写jni调用的dll

有办法了!是gcc少了行参数。如下:

gcc-I%JAVA_HOME%\include-I%JAVA_HOME%\include\win32-Wl,--add-stdcall-alias-shared-o call.dll call.c

参数:-Wl,--add-stdcall-alias可以为函数加上标准调用前缀(stdcall@nn)。

这样编译出的dll就可以了。都知道win32中dll中的函数要求有标准调用前缀,在JNI中不方便手动处理这个,Sun又没说清楚这事由编译器办。所以搞得我很郁闷。找了大半个月,终于在一个很古老的网页上找到答案。

基本上和VC的界面差不多学习C语言用的最多的还是VC++ 6.0

二、cygwin和mingw的区别

Unix下编译通过的C代码,在win32下编译是不能通过的,当然Unix和win32的API都是符合标准C,也就是说,大多数函数调用在unix和win32下是相同的.但是,unix有自己一些独特的API(如fork,spawn,signals,select,sockets等),如果代码中使用了这些API,在win32下当然找不到对应的库.

但是,这些API的功能在win32中也能实现,也许你已经发现了一个能让window编译Unix风格代码的方法:

1.修改编译器,让window下的编译器把诸如fork的调用翻译成等价的形式--这就是mingw的做法.

2.修改库,让window提供一个类似unix提供的库,他们对程序的接口如同unix一样,而这些库,当然是由win32的API实现的--这就是cygwin的做法.

MinGW相比CygWin/gcc来讲,更加贴近win32。因为它几乎支持所有的Win32API。它所连接的程序,不需要任何第三方库即可运行。

CygWin/gcc,其实这是两个东西。CygWin是一个让Windows拥有Unix-like环境的软件。而gcc就是安装在CygWin上的编译器。

CygWin/gcc与MinGW的最大区别在于:使用CygWin/gcc可以在Windows下调用unix-like的API,(如fork,spawn,signals,select,sockets等)。也就是说Cygwin是运行在Windows下的,但是她使用的是Unix-like系统的函数和思想。由于这个区别,导致的结果就是用CygWin/gcc编译出来的程序可以无缝的运行在*nix环境下。但是如果调用了unix特有的API函数,在windows环境下不能正常运行,如果想在windows下正常运行的,就必须依赖cygwin1.dll,速度上会有些影响。

而用MinGW编译出来的程序,如果源代码里面调用了unix环境的API,则MinGW会把这些对UNIX的API调用翻译成win32下等价的形式。同时这个程序是不能在windows下运行的。

说白了,如果你是想在windows环境下开发Linux运行程序,那么CygWin/gcc是你的不二之选。

而如果你想开发的是windows运行程序,并且追求速度,那么二者相比而言,MinGW是更好的选择

我没有用过这两个工具,只是有点想选择一个来用,于是在网上比较一下两者有啥不同,然后选一个适合自己的。过程中,我发现网上一份文章可能被多个人转载,被多个人稍微修改后当成自己的随笔写出,误认不浅。

说一点,什么cygwin编译的程序可以无缝在linux上运行,根本就不能这么理解。

cygwin官方的一个定义是Cygwin is not a way to run native linux apps on Windows. You have to rebuild your application from source if you want it to run on Windows.

翻译过来就是

cygwin不是让linux程序能在windows上运行的方法,如果你想要让linux程序能在windows运行,那么你只有用cygwin来重新编译一下源文件。

这句话完全反驳了无缝运行在linux的说法。就是说你在linux上编译的elf程序不能直接拿到cygwin上运行,同样,你用cygwin编译的程序也不是linux的elf格式,而是exe格式,exe是无法在linux上运行的。

cygwin和mingw都是为用户提供在windows操作系统使用GNU工具的方法,使得在windows上可以编译为linux写的c源代码并运行(让你可以用signal等linux才有的api)。真正的不同在于

1,cygwin大,mingw小

2,cygwin编译后的exe需要cygwin1.dll作为支持,而mingw不需要就可以直接运行,因为有中间层所以cygwin慢,mingw快。

3,cygwin包含的内容更全面,能编译通过的linux源文件更多,mingw的min是minimalist所以能编译通过的更少。但,不是全部,就是说别指望你可以把任何为linux写的源代码在cygwin或mingw编译通过并运行。

在网上找的,不知道对不对

三、mingw是什么意思

mingw是什么?

mingw,是Minimalist GNU on Windows的缩写。它实际上是将经典的开源 C语言编译器 GCC移植到了 Windows下,并且包含了 Win32API,因此可以将源代码编译生成 Windows下的可执行程序。

Mingw安装教程:

步骤1、mingw的安装程序与Chrome、Adobe Flash Player的类似,是在线安装程序,必须联网才能正确安装。它只相当于一个下载器,当其运行时,将会从mingw的官方服务器上下载真正的mingw安装文件。双击运行 mingw安装程序。

步骤2、mingw安装程序运行后,出现的第一个窗口。主要是告诉你这个安装程序的版本,不用管它直接 Next。

步骤3、仍然是一些没有太大意义的提示信息,直接 Next。

步骤4、一般来说,选择上面那个后面带有日期的选项即可。如果你的 mingw在线安装程序不是最新的,那就选择下面那个选项。

步骤5、这就是所有软件安装时都有的版权声明页面,如果不同意则不能安装。

步骤6、在这里选择 mingw将要被安装到哪里。一般来说,不要安装到C盘,这是常识。要注意的是,mingw安装后,会占用 200MB左右的空间,请检查自己所选的磁盘空间是否足够。

步骤7、选择在开始菜单中是否创建快捷方式,以及创建在哪个目录中。如果你没有洁癖之类的,就不用管它,直接 Next。

步骤8、 mingw不仅可以编译C语言,还可以编译其他语言,但要先安装编译相应语言的组件。在这个窗口中就可以选择安装那些组件,只要勾选上之后就会自动安装。

步骤9、MSYS Basic System是一个小型的 GNU环境,类似的还有 Cygwin。它的主要作用是,可以让你使用一些在 Windows的命令提示符(Shell)下无效的命令。众所周知,Windows的命令提示符功能有限,很多强大的命令无法使用。在一般情况下这没有什么问题,但当你使用 GTK+开发图形界面程序时,就会发现 GTK+官方示例在编译时,所用的命令无法在命令提示符中运行,所以需要 MSYS。

步骤10、看一下上面的清单列表,如果没有问题,点击 Install就会开始安装。注意,一定要连接网络,否则无法安装。

步骤11、 mingw在线安装程序开始下载安装文件。实际上 mingw是一个绿色软件,将 mingw文件下载下来之后,配置一下就可以使用。mingw在线安装程序是简化了手动下载,让你可以更轻松的完成这一过程。

步骤12、mingw安装完成后会显示这个窗口,点击 Finish关闭安装程序,之后就剩配置 mingw了。上面那个选项,是显示安装日志,如果网络不好,可以检查一下是否全部正确下载了。

配置 mingw

步骤13、虽然 mingw已经安装完成,但还要配置 mingw,否则会无法使用。首先找到并打开你安装 mingw的目录,其中有一个 bin目录,将它的地址复制下来。

步骤14、然后在桌面上的「计算机(我的电脑)」右键属性,打开如上图所示的窗口。点击高级系统设置,即可打开下图所示的窗口。

步骤15、点击环境变量,打开下图窗口。

步骤16、在系统变量中找到 Path这个变量,选中它后点击编辑按钮,会弹出下图所示的窗口。

步骤17、将之前复制的 MinGw的 bin目录的地址,添加到 Path的变量值的最后面。在粘帖之前,要先在原变量值的最后面加一个英文的分号;,将 bin目录的地址分隔开。之后点击确定,就完成了 mingw的配置。

测试 mingw是否安装正确

步骤18、首先是打开 Windows的命令提示符,开始菜单运行输入字符 cmd回车,打开如下图所示 Shell窗口。

步骤19、在这里输入字符 gcc,回车。之所以输入 gcc是因为 mingw是 Windows版的 gcc,mingw和 gcc其实是一样的,只是所支持的操作系统不同。

步骤20、这个提示是告诉你,你没有向 gcc(mingw)输入任何代码源文件。虽然这是个警告,但却说明 gcc已经在正常运行了。到此,mingw已经安装成功了。