Значение опций в установщике mingw-w64
В онлайн-инсталляторе MinGW-W64 есть несколько полей, которые вы можете выбрать. Однако я не могу найти никакой документации по этому вопросу, и предположения, которые я сделал, не дают мне того поведения, которое я хочу.
Очевидно, что в этот проект была проделана большая работа, поэтому жаль, что это сдерживается отсутствием базовой документации.
Поля "Версия" и "Архитектура" не требуют пояснений, но есть и другие поля, с которыми у меня возникли проблемы (значения, показанные для текущего установщика):
- Темы, варианты
posix
а такжеwin32
- Исключение, варианты
dwarf
а такжеsjlj
- Сборка ревизии, варианты
0
,1
,2
,
Значения, которые я выбрал в предыдущей установке, были win32
, seh
а также 1
(явно варианты изменились с тех пор, но я не знаю, что к чему).
Каковы плюсы и минусы каждого варианта, особенно модель потоков и обработки исключений, и какая версия является "лучшей"?
Конкретные проблемы, с которыми я столкнулся при использовании x86_64-win32-seh-rev1
являются:
std::thread
а такжеstd::condition_variable
не поддерживаются- При отладке (используя Code::Blocks в качестве IDE), если выдается исключение, оно не переходит к обработчику исключения; Выбор следующей строки ничего не делает 3 раза, а затем прерывает выполнение.
Я могу справиться с проблемой отладки, но было бы неплохо иметь работающие потоки C++11.
1 ответ
Исключения
Пожалуйста, смотрите этот ответ для всех трех моделей (карлик, sjlj и seh).
Потоки
Вы можете решить, какие потоки вы хотите использовать: потоки POSIX или потоки API Windows. Нити posix имеют преимущество портативности; Вы можете использовать свой код на других платформах posix (например, linux) без изменений. Win32 потоковый API-интерфейс только для Windows. Если вы на 100% на Windows и, как и API, это не проблема, хотя.
Если вы используете новые функции C++, такие как std::thread
влияние менее заметно, поскольку у вас уже есть стандартный API для многопоточности. Я не уверен, есть ли действительно большая разница, если вы не используете api потока posix- / win32 напрямую (возможно 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 потому что это последний выпуск