MinGW 版本差异及选择

MinGW 简介

MinGW(全称为 Minimalist GNU for Windows),它实际上是将经典的开源 C 语言编译器 GCC 移植到了 Windows 平台下,并且包含了 Win32 API ,因此可以将源代码编译为可在 Windows 中运行的可执行程序。而且还可以使用一些 Windows 平台不具备的,但是 Linux 平台具备的开发工具和 API 函数。用一句话来概括就是:MinGW 就是 GCC 的 Windows 版本;

MinGW、 MinGW-w64 区别

MinGW-w64 原本是 MinGW 项目的分支,后来成为独立发展得项目,由于仅有 MinGW-w64 被 GCC 官方所支持, 而 MinGW 早已停止更新, 因此推荐使用 MinGW-w64;
MinGW-w64 与 MinGW 的区别在于 MinGW 只能编译生成 32 位可执行程序,而 MinGW-w64 则可以编译生成 64 位或 32 位可执行程序。

MinGW-w64 gcc版本区别

MinGW gcc是Windows版本的gcc编译器。各个版本之间存在一定差异。
在这里插入图片描述

MinGW 各版本参数说明

MinGW 可以适应不同系统开发环境,因此有几大参数需要进行选择: Version、Architecture、Threads、Exception

Version:指的是你选择的 GCC 编译器的版本,一般建议选择最新的版本;

Architecture:指的是你的电脑的系统类型,i686 表示的是 32 位的系统类型,x86_64 表示的是 64 位的系统类型;

Threads:指的是线程模型,posix 或 win32;

Exception:指的是异常处理模型。i686 系统架构有两种选择:dwarf 和 sjlj;x86_64 系统架构也有两种选择:seh 和 sjlj

posix VS win32

GCC for Windows带有两个线程模型:win32和posix。

posix(Portable Operating System Interface,可移植操作系统接口),是 UNIX 系统的一个 API 设计标准,很多类 UNIX 系统也在支持兼容这个标准,如 Linux 操作系统。
Win32,是 Windows 系统下一个 API 设计标准。

posix启用 c++11/c11多线程功能。 依赖于 libwinpthreads,即使你不直接调用 API,也将分发给 winpthreads;win32没有C++11多线程功能。因此,只有posix线程模型支持标准的多线程库。threads-posix发行版将使用 posix API并允许使用 std:: thread,threads-win32将使用 win32api,并禁用标准的std::thread 部分。

小结:win32:没有C++ 11多线程特性;posix:支持C ++ 11多线程特性。
如果在 Windows 下开发 Linux 应用程序,则选择 posix;
如果开发 Windows 平台下的应用程序,就需要选择 Win32;

sjij VS seh VS 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 一种带调试信息(DWARF- 2(DW2)EH)的包, 所以比一般的包尺寸大,只支持32位系统 – 没有永久的运行时间开销 – 需要整个调用堆栈被启用,这意味着exception不能被抛出,例如Windows系统DLL。

小结:
【x86_64 64位】

1、seh 是新发明的,而 sjlj 则是古老的。只用于64位系统。

2、seh 性能比较好,但不支持 32位。 sjlj 稳定性好,支持 32位和64位。

因此,x86_64 系统架构的推荐使用 seh 的异常处理模型。

【i686 32位】

dwarf 只支持 32 位,而 sjlj 支持 32 位或64 位,但是 dwarf 的性能要优于 sjlj。

因此,i686 系统架构的推荐使用 dwarf 的异常处理模型。

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Boost是一个功能强大的C++库,它提供了许多常用的功能和数据结构的实现,包括字符串处理、文件系统操作、线程管理、日期时间处理等等。Mingw是一个提供了GCC编译器和一系列相关工具的软件集合,它可以在Windows平台上进行C和C++的开发。 要在Mingw上使用Boost库,需要按照以下步骤进行配置和安装: 1. 首先,从Boost官网(https://www.boost.org/)下载最新的Boost库源代码,并解压到一个合适的目录。 2. 打开Mingw的安装目录,找到其中的bin目录,将其添加到系统的环境变量中。这样可以确保可以通过命令行调用到Mingw的各种工具。 3. 打开命令行终端,进入到Boost库的源代码目录。在该目录下执行命令"bootstrap.bat",这会生成一个名为b2的构建工具。 4. 接着,在终端中执行命令"b2",这会开始编译Boost库的各个组件。这个过程可能会需要一些时间。 5. 编译完成后,在终端中执行命令"b2 install",这会将Boost库的文件复制到Mingw的安装目录中。 6. 最后,在你的C++项目中,可以通过添加"-lboost_xxx"的方式来链接使用Boost库的对应组件。其中"xxx"是你要使用的具体组件的名称。 通过以上步骤,就可以在Mingw上成功配置和使用Boost库了。需要注意的是,不同版本的Boost库可能存在一些差异,因此建议参考Boost官方文档或网上的教程进行更详细的安装和使用说明。 ### 回答2: Mingw是一个在Windows平台上开发C和C++应用程序的开源软件集合。Boost是一个广泛使用的C++库,提供了许多实用工具和算法,可以大大提高程序的效率和功能。那么如何在Mingw中使用Boost呢? 首先,我们需要下载和安装Boost库。我们可以在Boost官方网站上找到适合Mingw的Boost二进制文件,并按照官方的说明进行下载和安装。 安装完成后,我们需要设置Mingw的环境变量。打开Mingw的安装目录,在bin文件夹下找到mingw32-make.exe所在的路径,将该路径添加到系统的环境变量中。 接下来,我们需要在Mingw的编译器中指定Boost库的位置。在C或C++源代码中,我们需要包含相关的头文件,并在编译时链接Boost库。 假设我们的Boost库安装在C:\boost目录下,我们可以通过在源代码中添加以下代码来包含Boost头文件: ```cpp #include <boost/algorithm/string.hpp> ``` 在编译时,我们需要使用以下命令来指定Boost库的位置: ```shell g++ -I C:\boost program.cpp -o program.exe ``` 其中,-I参数用于指定头文件的搜索路径,-L参数用于指定库文件的搜索路径,在这里我们需要将C:\boost添加到-I参数中。 最后,我们可以使用Mingw编译源代码并生成可执行文件。如果一切顺利,我们将能够成功使用Boost库来提高C和C++程序的性能和功能。 综上所述,使用Boost库来增强Mingw的开发能力需要下载和安装Boost库,设置Mingw的环境变量,指定Boost库的位置,并在源代码中包含相关的头文件。通过这些步骤,我们可以成功使用Boost库来提升Mingw开发环境下的编程能力。 ### 回答3: Mingw是一个在Windows操作系统上用于开发和编译C和C++程序的工具集合。然而,由于某些原因,Mingw的性能可能不如其他工具集。为了提高Mingw的性能,可以采取以下方法: 1.更新Mingw版本Mingw是一个开源工具集,经常会发布新的版本来修复bug和增加新特性。因此,确保使用最新版本Mingw可以提高其性能。 2.优化编译选项:在使用Mingw编译程序时,可以使用一些编译选项来优化程序的性能。例如,可以使用优化级别选项来提高代码的执行速度,通过启用链接时优化选项来减少可执行文件的大小等。 3.使用优化的算法和数据结构:在编写程序时,可以选择使用一些优化的算法和数据结构来提高程序的性能。例如,使用二分查找算法而不是线性查找算法来查找元素,使用哈希表而不是线性表来存储数据等。 4.合理编写代码:编写高效的代码可以提高程序的性能。避免使用不必要的循环和递归,减少函数调用的次数,合理使用指针和引用等,都可以改善程序的性能。 5.使用并行编程:对于一些计算密集型任务,可以考虑使用并行编程来充分利用多核处理器的优势。Mingw支持OpenMP等并行编程框架,可以通过使用这些框架来实现并行计算。 综上所述,通过更新Mingw版本、优化编译选项、使用优化的算法和数据结构、编写高效的代码以及使用并行编程等方法,可以提高Mingw的性能。这些方法可以根据具体的需求和情况选择使用,以达到最佳的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值