linux mingw?mingw能编译生成elf文件吗
大家好,关于linux mingw很多朋友都还不太明白,今天小编就来为大家分享关于mingw能编译生成elf文件吗的知识,希望对各位有所帮助!
gcc与mingw什么关系
gcc与mingw是相关但有所区别的两个编译工具。
关系:
1. GCC:是一个开源的编译器套装,支持多种编程语言,并能在多种操作系统上运行。它可以编译、链接并生成可在各种硬件平台上运行的程序。GCC提供了编译工具链,包括C、C++、Fortran等语言的编译器。
2. MinGW:是一个为Windows操作系统提供GNU工具集的版本,主要目标是提供一个可在Windows上编译生成本地可执行文件的开发环境。MinGW包含了GCC的Windows版本以及其他一些用于Windows开发的GNU工具。因此,通过MinGW,开发者可以在Windows系统上使用GCC来编译程序。
详细解释:
GCC的通用性:
GCC作为开源的编译器套装,不仅可以在Windows上运行,还可以在Linux、Unix等操作系统上使用。它是一个强大的工具,能够编译多种语言,形成一个完整的开发环境。由于其开源和跨平台的特性,GCC在开发者社区中得到了广泛的应用和认可。
MinGW的特定用途:
MinGW主要是为Windows开发者设计的。它提供了在Windows环境下开发C、C++等程序所需的工具链,让开发者可以直接在Windows系统上编译生成本地可执行文件。由于包含了GCC的Windows版本,MinGW能够利用GCC的强大功能来编译代码,同时确保生成的可执行文件能在Windows上正常运行。
两者的关联:
简单来说,如果你在Windows系统上开发C或C++程序,并希望使用GCC的功能来编译你的代码,那么MinGW是一个很好的选择。它提供了GCC的Windows版本以及一系列为Windows开发量身定制的工具,使得在Windows上进行C/C++开发变得更加便捷。而如果你在其他操作系统上开发,或者需要更多跨平台的功能,那么直接使用GCC会更加合适。
使用MinGW 在 Windows 上使用 GNU | Linux 中国
在 Windows环境下,通过 Minimalist GNU for Windows(MinGW)项目,您可以安装 GNU编译器集合(GCC)以及其他基本的 GNU组件,以实现 GNU Autotools的功能。以下将详细介绍如何在 Windows上安装 MinGW,使用 GCC,设置路径以及执行简单的代码示例。
安装 MinGW
最简便的 MinGW安装方法是使用 mingw-get,这是一个图形用户界面(GUI)应用。首先,从项目主页下载 mingw-get-setup.exe,然后按照向导的指示完成安装。
安装 GCC
完成 mingw-get的安装后,启动该应用并选择要安装的项目应用。在应用菜单中选择 mingw-get,接着从安装菜单中选择应用更改。在更改列表中,标记 GCC和 G++包以安装 GNU C和 C++编译器。
在 Windows上运行 Bash
MinGW还提供了可选的 Bourne shell命令行解释器,即 MSYS。这是 cmd.exe和 PowerShell的替代方案,通常默认为 Bash。Bash在将开源应用移植到 Windows平台时非常有用,因为它支持 POSIX环境,许多开源项目都假定使用此类环境。
要安装 MSYS,您可以使用 mingw-get GUI或 PowerShell内部进行操作。启动 Bash时,请使用完整路径。
设置路径
为了方便使用新安装的 GNU可执行文件,您需要将它们的根目录添加到 Windows的路径中。在 Windows系统中修改路径,您可以按照以下步骤操作:点击应用菜单并输入 env,然后在“环境变量”窗口中双击“路径”选区。在“编辑环境变量”窗口中,创建两个新条目:C:\MinGW\msys\1.0\bin和 C:\MinGW\bin。确保每个条目均设置正确,并单击确定以保存更改。
Hello World示例
完成设置后,您可以测试新的 MinGW系统。例如,使用 Vim编辑器编写并保存“hello world”代码,然后使用 GCC的 C++组件编译文件。最后,运行编译后的程序以验证设置是否正确。
通过 MinGW,您可以访问一个完整的开源世界,实现代码定制和自由。对于更深入的了解和探索,您可以尝试 Linux系统,它提供了更广泛的开源资源和功能。使用 MinGW时,享受 GNU的自由与灵活性。
minGW使用方法
基本用法在后面给你加上了
MinGW是指只用自由软件来生成纯粹的Win32可执行文件的编译环境,它是Minimalist GNU on Windows的略称。详情请参考<;。
这里的“纯粹”是指「使用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并不是一个 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