mingw-w64安装程序中选项的含义

在MinGW-W64在线安装程序中,您可以select几个字段。 不过,我找不到任何文件,我做的猜测不给我我想要的行为。

显然,这个项目已经做了很多工作,所以看起来可惜的是,由于缺乏基本的文档资料,这个问题被阻碍了。

“版本”和“体系结构”字段是不言自明的,但我遇到的其他字段是(以当前安装程序显示的值):

  • 线程 ,选项posixwin32
  • 例外 ,选项dwarfsjlj
  • build立修订 ,选项0

在我以前的安装中select的值是win32seh1 (显然这个选项自那时以来已经改变了,但是我不明白什么是什么)。

每个选项有哪些优缺点,特别是线程模型和exception处理,以及哪个版本是“最好的”?

我遇到的使用x86_64-win32-seh-rev1的具体问题是:

  • 不支持std::threadstd::condition_variable
  • 在debugging时(使用Code :: Blocks作为IDE),如果抛出exception,它不会跳转到exception处理程序; select下一行将不执行任何操作3次,然后中止运行。

我可以应付debugging问题,但是如果能够使用C ++ 11线程将会非常好。

例外

请看这三个模型的答案(矮人,sjlj和se) 。

主题

您可以决定要使用的线程类型:POSIX线程或Windows API线程。 posix线程具有便携性的优点; 你可以在没有修改的情况下在其他posix平台(例如linux)上使用你的代码。 win32线程API只是windows。 如果你是100%的窗口,喜欢它的API,这是没有问题,但。

如果你使用新的C ++特性如std::thread ,那么由于你已经有了一个标准的线程API,所以这个影响不太明显。 我不确定是否真的有很大的不同,如果你不直接使用posix- / win32线程api(也许std::thread原生句柄?)

另请参阅: mingw-w64线程:posix vs win32

建立修订

我想这只是Mingw(-w64)遵循GCC版本(4.8.x,4.9.x等)以来的另一个版本号。 如果你不需要一个特定的版本,你应该使用最新版本。

线程问题

如果抛出的异常是:

 terminate called after throwing an instance of 'std::system_error' what(): Enable multithreading to use std::thread: Operation not permitted 

那么只需链接pthreads – 问题就解决了。


建议

如果您没有理由使用特定的选项; 我个人的建议是:

 posix - dwarf - 2 
  • Posix启用C ++ 11 <thread><mutex><future>
  • 矮人更快
  • 2,因为这是最新的版本