mingw-w64安装程序中选项的含义
Meaning of options in mingw-w64 installer
在 MinGW-W64 在线安装程序中,有几个字段可以 select。但是我找不到任何关于此的文档,而且我所做的猜测并没有给我想要的行为。
很明显,这个项目已经做了很多工作,所以遗憾的是,由于缺乏基本文档而阻碍了采用。
"Version" 和 "Architecture" 字段是不言自明的,但我遇到问题的其他字段是(当前安装程序显示的值):
- 线程,选项
posix
和win32
- 异常,选项
dwarf
和sjlj
- 构建版本,选项
0
,1
,2
。
我在之前的安装中选择的值是 win32
、seh
和 1
(很明显,从那时起选项已经改变,但我 none 更明智什么是什么)。
每个选项的优缺点是什么,尤其是线程模型和异常处理,哪个版本是"best"?
我使用x86_64-win32-seh-rev1
遇到的具体问题是:
不支持 std::thread
和 std::condition_variable
- 调试时(使用Code::Blocks作为IDE),如果抛出异常不会跳转到异常处理程序; selecting Next Line 3 次什么都不做,然后中止 运行。
我可以解决调试问题,但如果有工作的 C++11 线程就更好了。
例外情况
请参阅this answer for all three models (dwarf, sjlj and seh)。
线程
您可以决定要使用哪种线程:POSIX 线程或 Windows API 线程。 posix 线程具有可移植性的优势;您可以在其他 posix 平台(例如 linux)上使用您的代码而无需修改。 win32 线程 api 仅为 windows。如果您在 windows 上 100% 并且喜欢 api,那没问题。
如果您使用像 std::thread
这样的新 C++ 功能,那么影响就不那么明显了,因为您已经有了用于线程的标准 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
然后 link pthreads - 问题就解决了。
推荐
如果您没有理由使用特定选项;我的个人推荐:
posix - dwarf - 2
- Posix 启用 C++11
<thread>
、<mutex>
和 <future>
- 矮人更快
- 2 因为是最新版本
在 MinGW-W64 在线安装程序中,有几个字段可以 select。但是我找不到任何关于此的文档,而且我所做的猜测并没有给我想要的行为。
很明显,这个项目已经做了很多工作,所以遗憾的是,由于缺乏基本文档而阻碍了采用。
"Version" 和 "Architecture" 字段是不言自明的,但我遇到问题的其他字段是(当前安装程序显示的值):
- 线程,选项
posix
和win32
- 异常,选项
dwarf
和sjlj
- 构建版本,选项
0
,1
,2
。
我在之前的安装中选择的值是 win32
、seh
和 1
(很明显,从那时起选项已经改变,但我 none 更明智什么是什么)。
每个选项的优缺点是什么,尤其是线程模型和异常处理,哪个版本是"best"?
我使用x86_64-win32-seh-rev1
遇到的具体问题是:
-
不支持
std::thread
和std::condition_variable
- 调试时(使用Code::Blocks作为IDE),如果抛出异常不会跳转到异常处理程序; selecting Next Line 3 次什么都不做,然后中止 运行。
我可以解决调试问题,但如果有工作的 C++11 线程就更好了。
例外情况
请参阅this answer for all three models (dwarf, sjlj and seh)。
线程
您可以决定要使用哪种线程:POSIX 线程或 Windows API 线程。 posix 线程具有可移植性的优势;您可以在其他 posix 平台(例如 linux)上使用您的代码而无需修改。 win32 线程 api 仅为 windows。如果您在 windows 上 100% 并且喜欢 api,那没问题。
如果您使用像 std::thread
这样的新 C++ 功能,那么影响就不那么明显了,因为您已经有了用于线程的标准 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
然后 link pthreads - 问题就解决了。
推荐
如果您没有理由使用特定选项;我的个人推荐:
posix - dwarf - 2
- Posix 启用 C++11
<thread>
、<mutex>
和<future>
- 矮人更快
- 2 因为是最新版本