In the MinGW-W64 online installer there are several fields you can select. However I cannot find any documentation on this, and the guesses I've made don't give me the behaviour I want.
Clearly a lot of work has gone into this project so it seems a pity that uptake is being held back by lack of basic documentation.
The "Version" and "Architecture" fields are self-explanatory but the other fields I have trouble with are (values shown as of current installer):
posix
and win32
dwarf
and sjlj
0
, 1
, 2
.The values I chose on my previous install were win32
, seh
and 1
(clearly the options have changed since then but I am none the wiser as to what's what).
What are the pros and cons of each option, especially the threading model and exception handling, and which version is "best"?
The specific problems I have encountered using x86_64-win32-seh-rev1
are:
std::thread
and std::condition_variable
are not supportedI can cope with the debugging problem but it would be really nice to have working C++11 threads.
MinGW-w64 is a improved version which supports both 32bit and 64bit, and some more of the WinAPI (still not all, because thats much work, but more than MinGW). MinGW-w64 only provides their source code, but no binaries to "just use" the compiler.
It will take 5-6 minutes. After finishing click on Close. After successful installation of MinGW, next step is to change the environment location for MinGW.
Please see this answer for all three models (dwarf, sjlj and seh).
You can decide what kind of threads you want to use: POSIX threads or Windows API threads. The posix threads have the advantage of portability; you can use your code on other posix platforms (eg. linux) without modifications. The win32 threading api is windows only. If you are 100% on windows and like it's api that's no problem though.
If you use new C++ features like std::thread
the impact is less visible since you already have a standard api for threading. I'm not sure if there's really a big difference if you don't use posix- / win32 thread api directly (maybe std::thread
native handles?)
See also: mingw-w64 threads: posix vs win32
I guess that's just another version number since Mingw(-w64) follows GCC versions (4.8.x, 4.9.x etc.). If you don't need an specific build, you should use the latest version.
If the exception thrown is:
terminate called after throwing an instance of 'std::system_error' what(): Enable multithreading to use std::thread: Operation not permitted
then just link pthreads - and the problem is solved.
If you don't have reasons to use a specific option; my personal recommendation:
posix - dwarf - 2
<thread>
, <mutex>
and <future>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With