mingw-w64安装程序中

时间:2015-04-29 14:52:10

标签: windows g++ mingw-w64

在MinGW-W64在线安装程序中,您可以选择多个字段。但是我找不到任何关于此的文件,我所做的猜测并没有给我我想要的行为。

很明显,很多工作已经进入这个项目,所以很遗憾由于缺乏基本文档而导致人们对这种工作的态度不利。

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

  • 主题,选项posixwin32
  • 例外,选项dwarfsjlj
  • 构建版本,选项012

我在之前安装时选择的值为win32seh1(显然选项自那时起已发生变化,但我不知道是什么)。< / p>

每个选项的优缺点是什么,特别是线程模型和异常处理,以及哪个版本是“最佳”?

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

  • std::threadstd::condition_variable不受支持
  • 调试时(使用Code :: Blocks作为IDE),如果抛出异常,则不会跳转到异常处理程序;选择Next Line不会做3次,然后中止运行。

我可以解决调试问题但是使用C ++ 11线程真的很不错。

1 个答案:

答案 0 :(得分:22)

例外

请参阅this answer for all three models (dwarf, sjlj and seh)

线程

您可以决定要使用哪种线程:POSIX线程或Windows API线程。 posix线程具有便携性的优点;您可以在其他posix平台(例如linux)上使用您的代码而无需修改。 win32线程api只是windows。如果你100%在Windows上,并且喜欢api,那就没问题了。

如果您使用新的C ++功能,例如std::thread,则影响不太明显,因为您已经有了标准的线程API。如果你不直接使用posix- / win32 thread api(也许是std::thread本机句柄,我不确定是否真的有很大区别?)

另请参阅:mingw-w64 threads: 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 ,因为它是最新版本