Значение опций в установщике 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 потому что это последний выпуск
Другие вопросы по тегам