下载链接:https://sourceforge.net/projects/mingw-w64/files/
参数含义:
version选项:指的是你选择的GCC编译器的版本
Architecture选项:指的是你的电脑的系统类型,i686表示的是32位的系统类型,x86_64表示的是64位的系统类型。我本人的电脑是64位的系统类型,所以选中x86_64。
Threads选项:指的是线程模型,posix/win32。
说明:
(1)POSIX(Portable Operating System Interface,可移植操作系统接口),它是UNIX系统的一个API设计标准,很多类UNIX系统也在支持兼容这个标准,如Linux操作系统。
(2)Win32,它是Windows系统下一个API设计标准,如果你是开发Windows平台下的应用程序,就需要选择Win32。
操作:本人是在Windows下开发Linux应用程序,所以选择的是:posix。
Exception
Exception选项:指的是异常处理模型。i686系统架构有2种选择:dwarf 和 sjlj。x86_64系统架构也有2种选择:seh 和 sjlj。由于我选择的是64位的系统架构,所以可供选择的异常处理模式是:seh 和 sjlj。下面说明sjlj, seh, dwarf三者的区别:
在C++中有 try..throw..catch,当它执行这种结构时,它需要保存现场还原现场,而 sjlj, seh, dwarf 正是实现这类过程的三种方式。
sjlj 全称是 SetJump / LongJump,前者设还原点,后者跳到还原点。可用于32位或者64位系统。
seh (Structured Exception Handling,结构化异常处理) 是 Borland 公司的,微软买了其专利使用权,它利用了FS段寄存器,将还原点压入栈,收到异常时再弹出。相较而言,sjlj 是 C 标准库就有的东西,seh 在 2014 年前是有专利的,从性能上说 seh 比 sjlj 快。只用于64位系统。
dwarf 只支持32位系统 – 没有永久的运行时间开销 – 需要整个调用堆栈被启用,这意味着exception不能被抛出,例如Windows系统DLL。
综上所述:
【x86_64 64位】
1、seh 是新发明的,而 sjlj 则是古老的。只用于64位系统。
2、seh 性能比较好,但不支持 32位。 sjlj 稳定性好,支持 32位和64位。
因此,x86_64系统架构的推荐使用 seh 的异常处理模型。
【i686 32位】
1、dwarf 只支持32位,而sjlj 支持32位/64位,但是dwarf 的性能要优于 sjlj。
因此,i686系统架构的推荐使用 dwarf 的异常处理模型。
操作:我的电脑是x86_64系统架构的,所以我选中 seh。
【参考】https://wiki.qt.io/MinGW-64-bit
windows系统环境变量添加PATH路径C:\Program Files\mingw64\bin,确认重启确认安装成功。