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