MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本
MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本
本文主要讲述如何安装 C语言 编译器——MinGW-w64,特点是文章附有完整详细的实际安装过程截图,文字反而起说明提示作用。
编写本文的原因始于我的一个观点:图片可以比文字传达更多的信息,也能让其他人更容易理解作者的意图及思想。因此,我将安装 MinGW-w64 的过程和步骤,编写成了这篇以图片为主的教程,为了让看到这篇文章的任何人,都可以很容易按照图片所示正确安装 MinGW-w64。
我希望写出一篇即使是⑨也可以看懂的 MinGW-w64 安装教程。
一、什么是 MinGW-w64 ?
MinGW 的全称是:Minimalist GNU on Windows 。它实际上是将经典的开源 C语言 编译器 GCC 移植到了 Windows 平台下,并且包含了 Win32API ,因此可以将源代码编译为可在 Windows 中运行的可执行程序。而且还可以使用一些 Windows 不具备的,Linux平台下的开发工具。一句话来概括:MinGW 就是 GCC 的 Windows 版本 。
以上是 MinGW 的介绍,MinGW-w64 与 MinGW 的区别在于 MinGW 只能编译生成32位可执行程序,而 MinGW-w64 则可以编译生成 64位 或 32位 可执行程序。
正因为如此,MinGW 现已被 MinGW-w64 所取代,且 MinGW 也早已停止了更新,内置的 GCC 停滞在了 4.8.1 版本,而 MinGW-w64 内置的 GCC 则更新到了 6.2.0 版本。
二、为什么使用 MinGW-w64 ?
1. MinGW-w64 是开源软件,可以免费使用。
2. MinGW-w64 由一个活跃的开源社区在持续维护,因此不会过时。
3. MinGW-w64 支持最新的 C语言 标准。
4. MinGW-w64 使用 Windows 的C语言运行库,因此编译出的程序不需要第三方 DLL ,可以直接在 Windows 下运行。
5. 那些著名的开源 IDE 实际只是将 MinGW-w64 封装了起来,使它拥有友好的图形化界面,简化了操作,但内部核心仍然是 MinGW-w64。
MinGW-w64 是稳定可靠的、持续更新的 C/C++ 编译器,使用它可以免去很多麻烦,不用担心跟不上时代,也不用担心编译器本身有bug,可以放心的去编写程序。
三、MinGW-w64 适合做什么?
对于熟悉 MinGW-w64 的高手而言,它可以编译任何 C语言 程序。但对于一般人来说,MinGW-w64 太过简陋,连图形用户界面都没有。这让习惯使用鼠标的人,感到很痛苦。虽然也可以通过一些配置,让 MinGW-w64 拥有图形用户界面,但那个过程非常麻烦。
除此之外,编译复杂的程序时,还需要你会编写 Makefile ,否则只能一个文件一个文件的编译,可想而知会多么辛苦。
但对于初学 C语言 的人来说,MinGW-w64 是正合适的编译器,至少黑色的命令提示符界面很有编程的气氛,感觉很酷。
在刚开始学 C语言 时,所有代码通常都写在一个文件中,只要输入几个简单的命令,就能用 MinGW-w64 编译成可执行文件。虽然 VS2015 等编译器,只要点击下鼠标就可以完成编译,但它会自动生成一大堆工程文件,让初学者摸不着头脑。而 MinGW-w64 则只会生成一个可执行文件。
如果对 MinGW-w64 和 VS2015 等编译器进行一下形容,那么 MinGW-w64 是手动的,而 VS2015 等编译器则是自动的。因此 MinGW-w64 的编译过程更加直观容易理解,也比较适合C语言学习。
总而言之,对于一般人来说,MinGW-w64 适合学习 C语言 时使用,真正工作还是用 VS2015 更好。当然如果您是在 Linux 下工作,那么Code::Blocks可能是一个选择,不过最大的可能是您必须习惯使用 GCC 来编译程序。
四、下载和安装 MinGW-w64
在开始安装之前,请先确认您满足以下几个条件。
1.您的电脑已经连接到网络。
2.您的电脑硬盘有500MB的剩余空间。
3.您现在有充足的时间。(受您当前网速的影响,安装过程可能会花费10几分钟或1个小时以上的时间。)
如果您确认,您满足了上述条件,那么就可以开始安装 MinGW-w64 了。
注意:教程中的图片都是实际安装时的原比例截图,如果您看不清图片中的提示语,可以将图片放大,不会影响清晰度。想要观看大图,只需点击图片,就会跳转到原始尺寸的图片页面中。如果前面的方法失效,您仍然可以通过浏览器放大页面的功能,放大图片,例如在 Chrome 浏览器下,您可以按住 Ctrl 键,然后滚动鼠标滚轮,即可放大页面。
1.MinGW-w64官方网站首页(http://mingw-w64.org/)
说明:MinGW-w64 官方网站的地址是:http://mingw-w64.org,首页样式如上图所示。
操作:点击红框中的“Downloads”超链接,进入 MinGW-w64 下载详情页面。
2.MinGW-w64下载详情页面
说明:这是 MinGW-w64 的下载详情页面。首先看到一个标题为 Pre-built toolchains and packages 的列表,这里面是包含 MinGW-w64 及特定工具的整合包。我们这个教程只安装 MinGW-w64 ,所以只需下载 MinGW-w64 即可。
操作:点击红框中的“SourceForge”超链接,就会进入 SourceForge 中的 MinGW-w64 下载页面。
3.SourceForge 中的 MinGW-w64 下载页面
说明:MinGW-w64 的代码和可执行文件被托管存储在 SourceForge 上,在这个页面上就可以直接下载 MinGW-w64 了。MinGW-w64 是非常复杂的,编译器大多都是如此,为了适应各种操作系统,它们的组件会存在各种不同的版本,以适应不同的环境。所以,我们直接下载 MinGW-w64 的安装程序,它会按照我们的需要,自动下载适合的组件,并将它们组织在一起。
操作:点击红框中的“Download mingw-w64-install.exe”超链接,将会下载这个 MinGW-w64 自动安装的程序。
4.等待 MinGW-w64 安装程序开始下载
说明:5秒钟之后,浏览器会自动下载 mingw-w64-install.exe 。
操作:只需等待。
注意:如果浏览器没有自动下载,则可以点击黄框中的“direct link”超链接,手动下载。如果下载速度非常慢,可以点击绿框中的“mirror”超链接,选择一个离自己近的镜像网站,可能会获得较高(无法保证)的下载速度。
5.正在下载 mingw-w64-intall.exe
说明:如果你的浏览器是 chrome ,那么在浏览器下部,会出现这样一个下载标签。
操作:只需等待。
6.MinGW-w64 安装程序
说明:这就是 MinGW-w64 的安装程序。它本质上是一个下载程序,会根据我们之后的一些设置,选择性的下载相应的组件,并将它们组织在一起。所以,运行前要确定网络通畅,而且你有足够的时间,因为根据你的网速,它可能需要花费一定的时间来下载。
操作:用鼠标双击运行 mingw-w64-install.exe 。
注意:如果出现无法运行,或者安装出错,你可以右键点击它,并在弹出窗口中选择“以管理员身份运行”选项,重新运行 mingw-w64-install.exe ,基本可以解决大部分问题。
7.MinGW-w64 安装程序欢迎界面
说明:欢迎使用 MinGW-w64 在线安装程序。
操作:点击红框中的 “Next” 按钮,将会进入下一步安装步骤。
8.从服务器获取 MinGW-w64 文件信息
说明:这里程序正在链接服务器,以便获取存储在仓库中的 MinGW-w64 的文件明细。
操作:只需等待。
9.MinGW-w64 版本选择
说明:在这个界面,你可以根据所要搭建的开发环境,选择不同的选项,从而下载所需的组件。
操作:选择 Version、Architecture、Threads、Exception、Build revision 下拉列表中适当的选项,接下来将会详细介绍这些选项。
10.选择 gcc 版本
说明:Version 指的是 gcc 的版本,如果没有特殊的需求,一般选择最高的版本号即可。
操作:在这个版本中,最高版本是 6.2.0 ,选中它即可。
11.选择电脑系统架构
说明:Architecture 是指电脑系统是 32位 还是 64位,根据你的电脑系统做出对应选择。
操作:我的电脑系统是 64位 的,所以我选择了 x86_64,如果你是 32位 系统,则选择 i686 即可。
12.选择操作系统接口协议
说明:这个世界上只有两种操作系统,符合 posix 协议的,和 Windows 。如这个笑话所说的,如果你想要开发 Windows 程序,需要选择 win32 ,而开发 Linux、Unix、Mac OS 等其他操作系统下的程序,则需要选择 posix 。
操作:我只开发在 Windows 下运行的程序,所以选择了 win32 。
13.选择异常处理模型(64位)
说明:异常处理在开发中非常重要,你在开发的过程中,大部分的时间会耗在处理各种异常情况上。如果你之前选择了 64位,则这里有两个异常处理模型供你选择,seh 是新发明的,而 sjlj 则是古老的。seh 性能比较好,但不支持 32位。 sjlj 稳定性好,支持 32位。
操作:我这里选择了 seh 。
14.选择异常处理模型(32位)
说明:选择了 32位 后,则可以用 dwarf 和 sjlj 两种异常处理模型。同样的,dwarf 的性能要优于 sjlj ,可以它不支持 64位 。
操作:建议选择 dwarf 。
15.建立修订
说明:暂时没弄明白是做什么的。(知道的人请留言)
操作:选择默认选项。
16.MinGW-w64 版本选择完成
说明:绿框中就是我的 MinGW-w64 安装配置单,gcc 是 6.2.0 版本,系统架构是 64位,接口协议是 win32,异常处理模型是 seh,Build revision 是 1 。
操作:点击红框中的“Next”按钮,进入下一个步骤。
17.选择 MinGW-w64 的安装目录
说明:在这里选择 MinGW-w64 将要安装到哪个目录中去。安装程序默认会将 MinGW-w64 安装在 C盘 ,而在 Windows 操作系统中 C盘 是系统盘,操作系统会被安装在这个盘里,而按照一般的习惯,我们尽量不把应用软件安装载系统盘里。因为以前的电脑使用的是机械硬盘,而机械硬盘频繁读写会降低效率,所以尽量将操作系统与应用软件放在不同的硬盘分区下。当然,现在的电脑大部分都配备了固态硬盘(SSD),而且通常作为系统盘来使用,因此已经没有读写效率的问题了。所以如果你还在用机械键盘,就将 MinGW-w64 放到其他非系统盘里,如果使用固态硬盘,则可以放在安装程序提示的默认位置,或其他地方均可。
操作:点击红框中的“Browse”按钮,以便更改 MinGW-w64 的安装位置。
18.更改 MinGW-w64 的安装位置
说明:点开绿框中的“此电脑”,就可以打开一个树状列表,然后找到你想要将 MinGW-w64 安装到的位置。你也可以点击黄框中的“新建文件夹”按钮,创建一个新的目录。
操作:选择好安装的目录后,点击红框中的“确定”按钮,之后安装程序将把 MinGW-w64 安装到那里。
19.确认 MinGW-w64 安装目录
说明:界面中的 Space available 指的是你选择的目录,所在的硬盘分区的剩余空间,而 MinGW-w64 至少会占用 500 MB 的空间。Create shortcuts in Start Menu 是说在开始菜单创建 MinGW-w64 的快捷方式,一般默认勾选即可。
操作:确认安装目录没问题后,点击红框中的“Next”按钮,开始正式安装 MinGW-w64 。
20.开始下载 MinGW-w64 本体
说明:安装程序开始连接服务器,并从中下载 MinGW-w64 的本体文件,视乎你的网络环境,下载所需的时间会有所不同,如果你有其他事情要做,可以点击“Cancel”按钮,取消本次安装。
操作:只需等待。
21.MinGW-w64 下载完成
说明:MinGW-w64 已经下载完成,我们可以在之前选择的安装目录下,找到它的各种组件文件。
操作:点击红框中的“Next”按钮,继续下一个步骤。
22.关闭 MinGW-w64 安装程序
说明:MinGW-w64 的安装程序已经完成了它的使命,但 MinGW-w64 还没有安装完成,之后我们还需要进行一些配置,才能正常使用它编译源代码。
操作:点击红框中的“Finish”按钮,将关闭 MinGW-w64 安装程序。
23.MinGW-w64 安装目录
说明:MinGW-w64 下载完成后的安装目录,包含1个文件夹:mingw64,3个文件:mingw-w64.bat、uninstall.exe、uninstall.ini,和1个快捷方式:mingw-w64。虽然 MinGW-w64 已经下载完成,但并没有安装完成,我们还需要配置一下操作系统的环境变量,将 MinGW-w64 的 bin 目录加入其中,使操作系统可以找到那些编译工具。
操作:双击红框中的“mingw64”文件夹,进入其中。
24.MinGW-w64 的 mingw64 文件夹
说明:mingw64 中包含了一系列的文件夹,根据文件夹的名称,大概能猜到它们是做什么用的,但我们暂时不需要完全明白,只需要知道其中 bin 文件夹中,存放了那些编译工具即可。
操作:双击红框中的“bin”文件夹,进入其中。
25.MinGW-w64 的 bin 文件夹
说明:bin 文件夹下包含了很多后缀名是 .exe 的可执行程序,这些就是开发时所需的工具,如:gcc.exe 是用来编译 C程序的,g++.exe 是用来编译 C++ 程序的,而 gdb.exe 则是用来调试程序的 debug 工具。
操作:点击红框中的地址栏,并复制(Ctrl + c)那一串地址。
26.此电脑
说明:我们已经复制了 MinGW-w64 的 bin 文件夹的地址,接下来只要将它添加到系统的环境变量中,就可以完成 MinGW-w64 的全部配置了。
操作:右键点击“此电脑”,在弹出的菜单中点击红框中的“属性”项。
27.计算机系统窗口
说明:这个窗口也可以通过“控制面板” -> “系统和安全” -> “系统”来打开。如果你不知道自己的系统是 32位 还是 64位,也可以在这里查看。
操作:点击红框中的“高级系统设置”链接,将打开“系统属性”窗口。
28.系统属性窗口
说明:所谓的“环境变量”其实就是各种程序的默认安装目录,在那里有可执行程序。
操作:点击红框中的“环境变量”按钮,将打开“环境变量”窗口。
29.系统环境变量窗口
说明:在这个窗口中我们可以编辑系统的环境变量,很多软件在安装的时候,会自动编辑环境变量。MinGW-w64 的安装程序比较简陋,只能由我们手动编辑。
操作:首先点击选中绿框中的“Path”项,然后再点击红框中的“编辑”按钮。
30.编辑 Path 环境变量
说明:这是 Windows 10 中的编辑界面,比之前的版本要清晰明了,操作简单了很多,也不容易出错了。
操作:点击红框中的“新建”按钮,将创建一个新的空白变量位置。
31.新建 MinGW-w64 的环境变量
说明:现在只需将之前复制的 MinGW-w64 的 bin 文件夹地址,复制到新增的空白变量位置里,即可完成 MinGW-w64 的配置工作。
操作:将 bin 文件夹地址,黏贴到红框中的输入框中。
32.添加 MinGW-w64 环境变量已完成
说明:MinGW-w64 的环境变量已经添加完毕。
操作:点击红框中的“确定”按钮,MinGW-w64 的配置就完成了。
33.启动“命令提示符”
说明:为了测试 MinGW-w64 是否配置成功,我们需要在“命令提示符”中执行一个命令。所以要先启动“命令提示符”,值得注意的是各个 Windows 版本的启动方式不同,但都可以通过打开“运行”窗口,输入“cmd”来打开它。
操作:右键点击开始按钮,在弹出的菜单中点击红框中的“命令提示符”项。
34.命令提示符
说明:MinGW-w64 是命令行工具,如果不与其他软件配合,则只能通过“命令提示符”来调用。
操作:输入“gcc -v” 并按回车键(Enter),将会显示 MinGW-w64 的组件列表。
35.MinGW-w64 安装完成
说明:如果你的“命令提示符”显示了一大串组件信息,那说明你的 MinGW-w64 已经安装完成了,恭喜!
操作:从现在开始你就可以用 MinGW-w64 来编译 C程序 了。
五、使用 MinGW-w64 编译源代码
MinGW-w64 没有图形用户界面,它其实是一组命令行工具集,任何操作都只能通过在“命令提示符”中输入命令的形式来执行。对于编程来说,这种命令行工具尤其独特的优势,那就是不用双手离开键盘,即可完成所有操作。鼠标虽然使用简单方便,但效率仍然不及键盘。而且,给一个程序开发图形用户界面,是一件非常麻烦的事情,因为它是与平台紧密相关的,你要考虑各个平台的不同。
当然,世界上还是有很多拥有漂亮的图形用户界面的集成开发环境(IDE),其中的一些内置的编译器就是 MinGW-w64(GCC) ,例如:Code Lite、Code::Blocks 等。
A.编译命令 gcc
格式:gcc 源代码文件的完整名字
示例:gcc hello.c
说明:“gcc”是 MinGW-w64 内置的编译命令,“hello.c”则是我们要编译的源代码文件的名字。
注意:首先,“gcc”命令与源代码的文件名之间有一个空格。其次,文件名必须完整正确,不能省略后缀名“.c”。
因为 MinGW-w64 本来就是将 GCC 移植到 Windows 上的产物,所以操作方式和 GCC 一样,只是在 Linux 下命令是被键入到“终端”中,而 Windows 下则是被键入到“命令提示符”里。
B.创建 hello.c 源代码文件
在用“gcc”命令编译源代码之前,我们首先要有一个存储了C语言代码的文件。C语言的源代码文件其实就是普通的文本文件,唯一的区别就是后缀名不同,文本文件的后缀名是“.txt”,而C语言源代码文件的后缀名是“.c”。
所以我们新建一个文本文件,名字可以任意取,我这里就将其命名为“hello”,现在文件的完整名字就是“hello.txt”了。之后我们只需要把“hello.txt”的后缀名“.txt”更改为“.c”后缀名,这样就得到了 C语言 源代码文件“hello.c”了。
C.编写 hello, world 源代码
这里用 Windows 自带的记事本或任意文本编辑器,将“hello.c”这个源代码文件打开,然后将上图所示的测试代码键入到文件中,最后保存文件即可。现在测试用的源代码文件已经准备完成,我们可以进行下一步的编译了。
这段代码是最基础的 hello, world 程序,会在屏幕上显示“hello, world”这段文字。相信这是学编程的大多数人,入门时的第一个程序,所以这里也就不再赘述了。
D.编译 hello.c 源代码
之前说过 MinGW-w64 是命令行工具没有图形用户界面,所以编译操作需要在命令提示符中进行。
首先我们打开命令提示符,然后要将工作目录定位到源代码文件的存储位置,这一步非常重要,没有接触过命令行工具的人,往往会在这里出错。DOS 命令“cd”可以改变当前的工作目录,具体做法是“cd”命令后面加上目标工作目录,如上图第三行,就是重新定位到 E盘的 a 目录下。使用完“cd”命令后,还要再键入一次定位到的目录的地址,这样才会转移过去,但只需要键入盘符即可,并不需要键入完整地址,如上图第四行。工作目录重新定位后,如上图第五行所示,工作目录已经从 C:\Users\lenovo 更改为 E:\a 。
现在我们只需要执行“gcc hello.c”这行命令,就可以将源代码编译为可执行程序了。
E.编译后生成 a.exe 可执行程序
如上图所示,a.exe 就是编译后生成的可执行程序。因为我们编译时没有指定生成的程序名,所以 MinGW-w64 默认将程序命名为 a ,加上后缀名就是 a.exe 了。如果我们想在编译时就指定生成的程序名,就需要使用“gcc”命令的“-o”选项了。
F.带 -o 参数的 gcc 命令
格式:gcc 源代码文件的名字 -o 编译后程序的名字
示例:gcc hello.c -o hello.exe
说明:“gcc”这个命令拥有很多内置选项,其中“-o”表示将它后面的单词设置编译后文件的名字。
注意:选项“o”是英文的小写字母,并不是数字零,并且它的后面只能是想设置的文件名。
这种在编译时命名的方法好像很鸡肋,初看好像只是帮我们省了一些时间,毕竟我们也可以在编译后手动改名。这种想法是因为我们的程序还很简单,只有一个源代码文件,也只会编译出一个程序。当以后我们的程序变复杂了,可能会在一个工作目录下编译出复数个程序,这时就必须用 -o 选项了,否则编译出的程序都叫 a.exe ,会在生成时互相覆盖掉。
G.编译 hello.c 成 hello.exe
同样要先定位到我们在用的工作目录下,然后执行“gcc hello.c -o hello.exe”这条命令,就会编译生成一个名叫 hello.exe 的可执行文件了。
H.编译后生成 hello.exe 可执行程序
执行完“gcc hello.c -o hello.exe”编译命令后,会在工作目录中生成 hello.exe 可执行程序,这就是我们得到的最终成果。
I.双击运行 hello.exe
用鼠标双击运行编译后的 hello.exe 程序,会启动一个命令提示符窗口,并在里面显示“hello, world”这几个字符。这代表我们成功的完成了一次编译,将那段C语言代码编译成了计算机可以执行的程序。
J.在命令提示符中运行 hello.exe
想要运行编译好的程序,并不是非要用鼠标双击程序启动,也可在命令提示符中直接输入编译后的程序名称,例如输入“hello.exe”,也可以直接运行程序。甚至可以省略程序的后缀名,只需输入“hello”即可,程序同样会正确的运行。
六、一些额外的设置
这些额外的设置,可以使 MinGW-w64 使用起来更方便。因为“gcc”命令有些麻烦,每次编译都要输入类似“gcc hello.c -o hello.exe”这样的一串字符,所以我们为了简化这一步骤,转而使用“make”命令。只是“make”是 Linux 和 类Unix 下的工具,所以在 MinGW-w64 中需要一些额外的修改。
1).创建 gcc.exe 的副本 cc.exe
首先复制一个“gcc.exe”的副本,然后将其更名为“cc.exe”即可。
2).创建 mingw32-make.exe 的副本 make.exe
与对“gcc.exe”的操作相同,复制一个“mingw32-make”的副本,然后更名为“make.exe”。
3).使用 make 命令编译源代码
现在我们就可以使用“make”命令来编译源代码,只需要输入“make hello”即可编译生成“hello.exe”了。
七、进阶
上述只是简单的编译源代码的方法,适用于单个或少量源代码文件,如果是复杂的大型程序,要用到 makefile 来组织源代码时,就需要 mingw32-make(修改后使用 make) 命令了。
如果程序编译或运行出错,需要调试源代码,则可以使用 gdb 命令,来帮助我们确定问题产生在哪里。
如果代码没有明显的编译错误,运行时也没有逻辑错误,则在最终编译为可发布版的程序时,我们还要考虑编译优化的问题,以便生成的程序文件拥有更小的体积,和更高的运行效率。gcc 命令有 -00 、 -01 、 -02 、 -03 这几个优化选项,其中 -00 是默认选项,意思是无优化,剩下的几个选项随数字的增大,优化程度也会逐渐增强。
八、问题列表
这里会列出一些可以预见的问题,并提供解决问题方法。
①.如果“自动安装程序”无法下载组件
说明:如果网络环境不太好,或因宽带提供商的限制,可能会导致程序下载组件非常的缓慢,甚至会失败。这种时候,我们可以不用安装程序,而是尝试直接手动下载 MinGW-w64 的压缩包。这种方法的好处是可以使用第三方下载软件,而这种下载软件大多提供加速下载,以及断点续传功能。基本能解决无法下载的问题。
操作:如上图所示。将第四章、第3节 SourceForge 中的 MinGW-w64 下载页面往下拉,就能看到这部分的页面。其中,红框内的链接,就是 MinGW-w64 的压缩包手动下载链接(6.3.0版),只需根据需要选择对应的链接下载即可。例如:x86_64-win32-seh ,x86_64 指 64位,win32 指可开发 Windows 程序,seh 指 异常处理模型。
将 MinGW-w64 压缩包下载到本地后,解压缩,然后就可以照常进行配置了。
出处:https://zhuanlan.zhihu.com/p/76613134
=======================================================================================
最近用 C 语言写了一个小程序,在设计时希望该程序在 Windows、Linux平台上都能够运行,所以使用宏来区分在不同操作系统下执行的语句。比如这个程序需要加载动态链接库,在包含头文件时,写法如下:
#if defined(_WIN32) || defined(_WIN64)#include #else#include /* unix 或 linux 下包含与动态库加载、卸载有关函数的头文件名是 dlfcn.h */#endif
加载动态链接库时,处理方法如下:
#if defined(_WIN32) || defined(_WIN64)HINSTANCE dll_handle_for_win;/* 当操作系统为 windows 类型时,使用函数 LoadLibrary() 加载动态链接库 */#elsevoid *dll_handle_for_unix_or_linux;char *error_statement;/* 当操作系统为 unix 或 linux 类型时,使用函数 dlopen() 加载动态链接库 */#endif int error_code;char dll_file_name[256];/* dll_file_name 是要加载的动态链接库文件名 */ /*********************************注意:这里省略了部分内容**********************************/ /**************************************/// Load dynamic library#if defined(_WIN32) || defined(_WIN64)if ( !(dll_handle_for_win = LoadLibrary(dll_file_name)) ){#ifdef _DEBUGprintf("load dynamic link library \'%s\' failed at %s, line %d!\n", dll_file_name, __FILE__, __LINE__);error_code = GetLastError();printf("LoadLibrary() function returned error code: 0x%x\n", error_code);#endifreturn (-1);}/**************************************/#elsedlerror();if ( !(dll_handle_for_unix_or_linux = dlopen(dll_file_name, RTLD_LAZY)) ){error_statement = dlerror();#ifdef _DEBUGprintf("load dynamic link library \'%s\' failed at %s, line %d!\n", dll_file_name, __FILE__, __LINE__);printf("Error statement: %s\n", error_statement);#endifreturn (-1);}#endif
释放动态链接库时,处理方法如下:
#if defined(_WIN32) || defined(_WIN64)FreeLibrary(dll_handle_for_win);#elsedlclose(dll_handle_for_unix_or_linux);#endif
在 64 位 Win7 下,用 Visual Studio 2010 编译、链接,能够生成可执行程序,程序能正常运行。接下来想知道在 Linux 下该程序能否编译,希望在 Windows 平台上先排除一下像拼写一类的小错误,可是手头暂时没有安装Linux 的计算机,这样就需要在 Windows 平台上用 GCC 编译一下这个程序,我的做法如下:
1. 安装 MinGW;在 MinGW 的官网(http://mingw.org/)上找到安装文件。
下载链接为:https://nchc.dl.sourceforge.net/project/mingw/Installer/mingw-get-setup.exe
注意:这个是 32 位的 MinGW,如果需要 64 位的 MinGW,
下载网页是:MinGW-w64 – for 32 and 64 bit Windows download | SourceForge.net
运行程序 mingw-get-setup.exe,安装时会看到是否同时安装图形用户界面支持( also install support for the graphical user interface )的提示,由于用不到,就取消了对这一项的勾选。安装时将 MinGW 安装到了默认目录 C:\MinGW 下。
2. 安装GCC;按Windows组合键 Win + R,输入命令 cmd,启动命令提示符窗口。进入目录 C:\MinGW\bin\ ,执行命令:mingw-get install gcc
这样就开始从网络上下载 GCC 相关的文件,安装完成后,
执行命令:gcc –version ,将会看到 GCC 的版本号。如果想获取更多信息,可以执行命令:gcc -v
3. 修改环境变量;“开始”按钮 -> 计算机 -> 菜单中的“系统属性” -> 高级系统设置,修改环境变量,在原有的 Path 后面添加以下内容:
;C:\MinGW\bin\
修改完成后重启计算机。重启后,就可以在命令提示符窗口中,在任意路径下执行 gcc.exe 程序了。
4. 编译 C 程序。由于当前阶段只想编译程序,不需要链接。进入命令提示符窗口,到程序所在目录下,执行gcc的命令
格式如下:gcc -c 源代码文件名.c -I 头文件所在路径
比如可以是:gcc -c test.c -I C:\testcode\include
结果显示了一大堆错误和警告。仔细一看,好像编译报错的程序语句都处于 _WIN32 或 _WIN64 宏定义中包含的部分。我们此时的目的并不是要用 GCC 生成 Windows 下的可执行程序,而是想让 GCC 编译一下程序中能够在 Linux 平台上执行的那部分语句,检查那部分语句中是否存在语法等错误,但是现在 GCC 编译的还是在 Windows 平台上能执行的语句。为什么会这样?需要查看一下 GCC 编译时默认已定义了哪些宏。在网上查到查看 GCC 编译时默认宏的命令是:
gcc -posix -E -dM – </dev/null
可是该命令在 Windows 的命令提示符窗口中无法执行。这该怎么办呢?忽然想到这台计算机上安装过从Git for Windows上下载的 git for windows。该程序自带了一个 Git Bash,如下图:
到“开始”菜单中,启动 Git Bash,然后输入命令:gcc -posix -E -dM – </dev/null
这下可以成功执行了,显示出当前 GCC 中定义的宏列表,如下图:
果然使用 mingw-get 安装的 gcc 中,已经默认定义了 _WIN32 宏。在编译 C 程序时,想取消对 _WIN32 及 _WIN64 宏的定义,可以使用下面的命令:
gcc -c test.c -I C:\testcode\include -U_WIN32 -U_WIN64
还发现默认已定义的宏中没有包含 _DEBUG,在编译调试版程序时需要用到这个宏,可以使用下面的命令:
gcc -c test.c -I C:\testcode\include -U_WIN32 -U_WIN64 -D_DEBUG
用 GCC 编译时发现不再报告处于 _WIN32 或 _WIN64 宏定义中包含的语句错误了。接下来根据编译结果给出的提示,修改了一些拼写错误,成功生成了 test.o 文件,证明该 C 程序能够在 Linux 下通过编译。等将来有空时安装 Linux 虚拟机,再将 C 程序及其调用的动态库源程序都拿到 Linux 上编译链接,就能生成 Linux 上的可执行程序了。
————————
说明
gcc 编译选项:
-c 只编译,不链接
-D 使用指定的宏
-U 取消指定的宏
出处:https://blog.csdn.net/henter/article/details/54863462
=======================================================================================
MinGW安装和使用
MinGW(Minimalist GNU For Windows)是个精简的Windows平台C/C++、ADA及Fortran编译器,相比Cygwin而言,体积要小很多,使用较为方便。
MinGW最大的特点就是编译出来的可执行文件能够独立在Windows上运行。
MinGW的组成:
- 编译器(支持C、C++、ADA和Fortran)
- GNU工具
- mingw-get(用于Windows平台安装和部署MinGW和MSYS的命令行安装器)
- mingw-get-inst(用于GUI打包)
1. MinGW安装
1.1. 下载
MinGW官方网址:http://www.mingw.org/
点击“Download Installer”后会跳转到Sourceforge页面进行下载:
之后,会下载一个名为mingw-get-setup.exe
的安装文件。
1.2. 安装下载器
运行刚刚下载的安装程序,看到如下界面:
点击“Install”,进入下面这个界面:
选择安装路径
默认安装路径为C:\MinGW
,我习惯安装在D盘下,点击“Change”修改路径如下:
点”Continue”继续。
安装过程
安装完成后,桌面出现这样一个图标。
安装器
这只是个安装器,需要在线下载真正的安装内容,所以速度不会快。
1.3. 选择安装组件
运行安装程序,有的版本在安装之后会自动运行,看到下面这个界面:
选择安装组件
选择需要安装的组件,右键选择“Mark for Installation”,之后选择”Installation -> Apply Changes”。
1.4. GCC
这里重点要提到的是GCC组件的安装,如图所示。
选择GCC组件
先选择左边的”MinGW Base System”选项,之后再右边找到mingw-gcc。最好选择bin,dev和lic三个组件进行安装。
之后点击菜单栏中的“Installation”进行安装。
注意:在安装程序中,复选框为绿色表示已经安装的项目,复选框为白色表示没有安装的项目。因此如果需要删除,只需要在绿色复选框右键后选择“Mark for removal”即可。
1.5 确认安装成功
安装执行完成后,在D:\MinGW\bin
目录(我们之前配置好的路径)下进行查看。如果找到下面这三个可执行文件,说明安装成功。
注意:如果你是为了使用Code::Blocks安装MinGW,到这一步就完成了。之后的使用请参考C语言从零开始(二)-Code::Blocks使用。Code::Blocks在配置Debug工具时需要制定MinGW的路径。
2. 配置
2.1. 设置MinGW环境变量
鼠标右键“我的电脑”->“属性”,选择“高级”选项卡下的“环境变量”,在系统变量里点“新建”,之后填写MinGW的安装路径,如下:
MinGW路径
之后找到Path,在最前面添加下面这段声明,之后点击确定。安装完成后,在MinGW\bin的目录下,会有一个名为gcc.exe的可执行文件。看到这个说明安装成功。
%MinGW%\bin;
2.2. 查看GCC版本信息
打开命令行,输入gcc -v查看编译器版本。如下图:
GCC
3. MinGW使用
3.1. 测试编译
测试文件test.c,代码如下
#include void main() {printf("Hello World!");}
3.2. 编译test
编译命令如下:
gcc test.c -o test
输出结果为:test.exe
3.3. 执行
输入test回车,结果如下:
结果
from:https://www.jianshu.com/p/e9ff7b654c4a
出处:https://www.cnblogs.com/lidabo/p/8990348.html
=======================================================================================
win10安装MinGW
MinGW,Minimalist GNU for Windows,windows最简化的GNU,就是一个C的编译工具集,转为windows操作系统下的C/C++开发者服务。我们从官网下载安装程序,打开官网后右边菜单栏点击Downloads:
跳往下载列表页面后,往下拉,点击安装程序下载:
最后双击该exe执行安装,弹出安装界面:
接下来默认给你设置好了安装目录和勾选了默认设置,点击继续:
最后进入安装包阶段,左边窗口有两个按钮:基础必备的和全部的,对应右边的详细列表:
点击复选框,下面窗口会说明这个包用来干嘛, 在弹出的框中点击Mark for Installation安装标记后,点击左上角的Installation -> Apply Changes:
虽然只是这几个基础包,下载也不容易,毕竟是外网,老是链接超时:
而且它会反复尝试,退不出来,只能用任务管理器把它kill掉。既然此路不通,只能另走他路。我们打开命令行,进入C盘的MinGW目录bin路径,敲命令安装:
C:\MinGW\bin>mingw-get install gcchttp://osdn.net/dl/mingw/gcc-9.2.0-2-mingw32-lic.tar.xz21.33 kB / 21.33 kB |================================================| 100%http://osdn.net/dl/mingw/libiconv-1.14-4-mingw32-dll-2.tar.xz642.41 kB / 642.41 kB |================================================| 100%http://osdn.net/dl/mingw/libatomic-9.2.0-2-mingw32-dll-1.tar.xz7.47 kB / 7.47 kB |================================================| 100%http://osdn.net/dl/mingw/libgcc-9.2.0-2-mingw32-dll-1.tar.xz167.01 kB / 167.01 kB |================================================| 100%http://osdn.net/dl/mingw/libgmp-6.1.2-3-mingw32-dll-10.tar.xz204.25 kB / 204.25 kB |================================================| 100%
如果还是出现链接下载失败:
http://osdn.net/dl/mingw/gcc-9.2.0-2-mingw32-lang.tar.xz1.57 MB / 1.57 MB |================================================| 100%mingw-get: *** ERROR *** http://osdn.net/dl/mingw/gcc-core-9.2.0-2-mingw32-bin.tar.xz:cannot open URL; status = 12029mingw-get: *** ERROR *** Get package: http://osdn.net/dl/mingw/gcc-core-9.2.0-2-mingw32-bin.tar.xz: download failedinstall: gcc-9.2.0-2-mingw32-lic.tar.xz
我们重新执行一次即可,它会把失败的jar包重新下载:
C:\MinGW\bin>mingw-get install gcchttp://osdn.net/dl/mingw/gcc-core-9.2.0-2-mingw32-bin.tar.xz17.05 MB / 17.05 MB |================================================| 100%install: gcc-9.2.0-2-mingw32-lic.tar.xzmingw-get: *** ERROR *** package gcc-9.2.0-2-mingw32-lic.tar.xz is already installedinstall: gcc-core-9.2.0-2-mingw32-bin.tar.xz installing gcc-core-9.2.0-2-mingw32-bin.tar.xzinstall: gcc-core-4.8.2-2-mingw32-dev.tar.lzmamingw-get: *** ERROR *** package gcc-core-4.8.2-2-mingw32-dev.tar.lzma is already installedinstall: gcc-core-4.8.1-5-mingw32-doc.tar.lzmamingw-get: *** ERROR *** package gcc-core-4.8.1-5-mingw32-doc.tar.lzma is already installedinstall: gcc-9.2.0-2-mingw32-man.tar.xzmingw-get: *** ERROR *** package gcc-9.2.0-2-mingw32-man.tar.xz is already installedinstall: gcc-9.2.0-2-mingw32-info.tar.xzmingw-get: *** ERROR *** package gcc-9.2.0-2-mingw32-info.tar.xz is already installedinstall: gcc-9.2.0-2-mingw32-lang.tar.xzmingw-get: *** ERROR *** package gcc-9.2.0-2-mingw32-lang.tar.xz is already installed
一直下载不下来,我们也可以自己打开上面提示的下载地址页面,自己去下载:
然后需要手动把下载的包放到指定目录下:
同上,继续执行g++、gdb和mingw32-make的下载:
C:\MinGW\bin>mingw-get install g++http://osdn.net/dl/mingw/gcc-c++-9.2.0-2-mingw32-bin.tar.xz10.39 MB / 10.39 MB |================================================| 100%http://osdn.net/dl/mingw/gcc-c++-9.2.0-2-mingw32-man.tar.xz255.52 kB / 255.52 kB |================================================| 100%
C:\MinGW\bin>mingw-get install gdbhttp://osdn.net/dl/mingw/libz-1.2.11-1-mingw32-dll-1.tar.xz62.95 kB / 62.95 kB |================================================| 100%
gdb的话这个链接http://prdownloads.sourceforge.net死活连不上,我认为这个网址变更了,去掉了前面的prdownloads.变成如下链接:MinGW – Minimalist GNU for Windows – Browse /MinGW/Extension at SourceForge.net
我们把这几个下载下来:
把上面6个压缩包放到C:\MinGW\var\cache\mingw-get\packages目录中,重新安装一次。
mingw32-make也是如法炮制:
1、命令行执行安装失败(还是这个prdownloads.sourceforge.net):
C:\>mingw-get install mingw32-makemingw-get: *** ERROR *** http://prdownloads.sourceforge.net/mingw/make-3.82.90-2-mingw32-cvs-20120902-bin.tar.lzma" />
2、到sourceforge.net网站上找对应的包(一般都是找最上面那个最新的):
3、下完后放到mingw的包目录中:
4、重现用命令行执行以下安装:
C:\>mingw-get install mingw32-makeinstall: make-3.82.90-2-mingw32-cvs-20120902-bin.tar.lzma installing make-3.82.90-2-mingw32-cvs-20120902-bin.tar.lzmainstall: make-3.82.90-2-mingw32-cvs-20120902-doc.tar.lzma installing make-3.82.90-2-mingw32-cvs-20120902-doc.tar.lzmainstall: make-3.82.90-2-mingw32-cvs-20120902-lic.tar.lzma installing make-3.82.90-2-mingw32-cvs-20120902-lic.tar.lzmainstall: make-3.82.90-2-mingw32-cvs-20120902-lang.tar.lzma installing make-3.82.90-2-mingw32-cvs-20120902-lang.tar.lzma
最后把MinGW配置到系统环境变量中,方便使用以上工具:右键点击“此电脑” -> 选择“属性” -> 选“高级系统设置” -> 点“环境变量” -> 选“Path”后点编辑 -> 在弹出框点新建,把C:\MinGW\bin的路径加进去:
确认下我们的安装:
C:\Users\wuxun>gcc -vCOLLECT_GCC=gccCOLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/9.2.0/lto-wrapper.exegcc 版本 9.2.0 (MinGW.org GCC Build-2)C:\Users\wuxun>g++ -vCOLLECT_GCC=g++COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/9.2.0/lto-wrapper.exegcc 版本 9.2.0 (MinGW.org GCC Build-2)C:\>gdb -vGNU gdb (GDB) 7.6.1Copyright (C) 2013 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law. Type "show copying"and "show warranty" for details.This GDB was configured as "mingw32".For bug reporting instructions, please see:.C:\>mingw32-make -vGNU Make 3.82.90Built for i686-pc-mingw32Copyright (C) 1988-2012 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.出处:https://www.cnblogs.com/wuxun1997/p/13364183.html
=======================================================================================
windows下安装mingw-w64
mingw-w64应该可以算是mingw的改进版本吧,mingw系列编译器是非常好的并且主流的c/c++编译器
mingw-w64只负责程序的编译,只提供命令行操作没有编辑代码的图像界面,代码的编写需要由文本编辑器(如vscode)来完成
安装步骤:
首先官网去下载:mingw-w64
但普通人群可能会因为一些原因下载失败,所以一般建议下载离线版解压后添加环境变量
离线版下载地址:Download MinGW-w64 - for 32 and 64 bit Windows from SourceForge.net
下载后选一个合适的位置解压,这个位置也就相当于是安装位置(顺便给文件夹改个短一点的名字)
进入解压好的文件夹下的bin文件夹
复制下来路径
然后在此电脑鼠标右键选择属性
选择高级系统设置
点环境变量
选择系统环境变量下的Path
选择编辑
点新建
然后把刚刚复制的文件路径粘贴进去
然后一路点确定退出
完成
验证一下
按win+r运行cmd或者powershell输入gcc -v
出现下图的信息说明一切顺利
结束
之后就能通过g++ xxx.cpp -o xxx.exe这样的命令行指令编译c/cpp文件了