MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本

Posted 生活需要深度

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本相关的知识,希望对你有一定的参考价值。

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 <windows.h>
#else
  #include <dlfcn.h>  /* unix 或 linux 下包含与动态库加载、卸载有关函数的头文件名是 dlfcn.h */
#endif

        加载动态链接库时,处理方法如下:

#if defined(_WIN32) || defined(_WIN64)
  HINSTANCE dll_handle_for_win;
/* 当操作系统为 windows 类型时,使用函数 LoadLibrary() 加载动态链接库 */
#else
  void *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 _DEBUG
    printf("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);
#endif
    return (-1);
  
/**************************************/
#else
  dlerror();
  if ( !(dll_handle_for_unix_or_linux = dlopen(dll_file_name, RTLD_LAZY)) )
  
    error_statement = dlerror();
#ifdef _DEBUG
    printf("load dynamic link library \\'%s\\' failed at %s, line %d!\\n", dll_file_name, __FILE__, __LINE__);
    printf("Error statement: %s\\n", error_statement);
#endif
    return (-1);
  
#endif

        释放动态链接库时,处理方法如下:

#if defined(_WIN32) || defined(_WIN64)
  FreeLibrary(dll_handle_for_win);
#else
  dlclose(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 <stdio.h>

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 gcc
http://osdn.net/dl/mingw/gcc-9.2.0-2-mingw32-lic.tar.xz
21.33 kB / 21.33 kB     |================================================| 100%
http://osdn.net/dl/mingw/libiconv-1.14-4-mingw32-dll-2.tar.xz
642.41 kB / 642.41 kB   |================================================| 100%
http://osdn.net/dl/mingw/libatomic-9.2.0-2-mingw32-dll-1.tar.xz
7.47 kB / 7.47 kB       |================================================| 100%
http://osdn.net/dl/mingw/libgcc-9.2.0-2-mingw32-dll-1.tar.xz
167.01 kB / 167.01 kB   |================================================| 100%
http://osdn.net/dl/mingw/libgmp-6.1.2-3-mingw32-dll-10.tar.xz
204.25 kB / 204.25 kB   |================================================| 100%

  如果还是出现链接下载失败:

http://osdn.net/dl/mingw/gcc-9.2.0-2-mingw32-lang.tar.xz
1.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 = 12029
mingw-get: *** ERROR *** Get package: http://osdn.net/dl/mingw/gcc-core-9.2.0-2-mingw32-bin.tar.xz: download failed
install: gcc-9.2.0-2-mingw32-lic.tar.xz

  我们重新执行一次即可,它会把失败的jar包重新下载:  

C:\\MinGW\\bin>mingw-get install gcc
http://osdn.net/dl/mingw/gcc-core-9.2.0-2-mingw32-bin.tar.xz
17.05 MB / 17.05 MB     |================================================| 100%
install: gcc-9.2.0-2-mingw32-lic.tar.xz
mingw-get: *** ERROR *** package gcc-9.2.0-2-mingw32-lic.tar.xz is already installed
install: gcc-core-9.2.0-2-mingw32-bin.tar.xz
 installing gcc-core-9.2.0-2-mingw32-bin.tar.xz
install: gcc-core-4.8.2-2-mingw32-dev.tar.lzma
mingw-get: *** ERROR *** package gcc-core-4.8.2-2-mingw32-dev.tar.lzma is already installed
install: gcc-core-4.8.1-5-mingw32-doc.tar.lzma
mingw-get: *** ERROR *** package gcc-core-4.8.1-5-mingw32-doc.tar.lzma is already installed
install: gcc-9.2.0-2-mingw32-man.tar.xz
mingw-get: *** ERROR *** package gcc-9.2.0-2-mingw32-man.tar.xz is already installed
install: gcc-9.2.0-2-mingw32-info.tar.xz
mingw-get: *** ERROR *** package gcc-9.2.0-2-mingw32-info.tar.xz is already installed
install: gcc-9.2.0-2-mingw32-lang.tar.xz
mingw-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.xz
10.39 MB / 10.39 MB     |================================================| 100%
http://osdn.net/dl/mingw/gcc-c++-9.2.0-2-mingw32-man.tar.xz
255.52 kB / 255.52 kB   |================================================| 100%
C:\\MinGW\\bin>mingw-get install gdb
http://osdn.net/dl/mingw/libz-1.2.11-1-mingw32-dll-1.tar.xz
62.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-make
mingw-get: *** ERROR *** http://prdownloads.sourceforge.net/mingw/make-3.82.90-2-mingw32-cvs-20120902-bin.tar.lzma?download:cannot open URL; status = 12031
mingw-get: *** ERROR *** Get package: http://prdownloads.sourceforge.net/mingw/make-3.82.90-2-mingw32-cvs-20120902-bin.tar.lzma?download: download failed
mingw-get: *** ERROR *** http://prdownloads.sourceforge.net/mingw/make-3.82.90-2-mingw32-cvs-20120902-doc.tar.lzma?download:cannot open URL; status = 12031
mingw-get: *** ERROR *** Get package: http://prdownloads.sourceforge.net/mingw/make-3.82.90-2-mingw32-cvs-20120902-doc.tar.lzma?download: download failed
mingw-get: *** ERROR *** http://prdownloads.sourceforge.net/mingw/make-3.82.90-2-mingw32-cvs-20120902-lic.tar.lzma?download:cannot open URL; status = 12031
mingw-get: *** ERROR *** Get package: http://prdownloads.sourceforge.net/mingw/make-3.82.90-2-mingw32-cvs-20120902-lic.tar.lzma?download: download failed
mingw-get: *** ERROR *** http://prdownloads.sourceforge.net/mingw/make-3.82.90-2-mingw32-cvs-20120902-lang.tar.lzma?download:cannot open URL; status = 12031
mingw-get: *** ERROR *** Get package: http://prdownloads.sourceforge.net/mingw/make-3.82.90-2-mingw32-cvs-20120902-lang.tar.lzma?download: download fai

以上是关于MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本的主要内容,如果未能解决你的问题,请参考以下文章

VSCode编译C/C++

MinGW-w64 C/C++编译器个版本说明

在 Matlab 中安装 C 编译器

mingw-w64-v3.1.0怎么安装

Visual Studio Code 搭建 C/C++开发环境方法总结

Ubuntu下使用mingw-w64交叉编译ffmpeg