Значение опций в установщике mingw-w64



В онлайн-установщике MinGW-W64 есть несколько полей, которые вы можете выбрать. Однако я не могу найти никаких документов на этот счет, и предположения, которые я сделал, не дают мне желаемого поведения.



Очевидно, что в этот проект было вложено много работы, поэтому, похоже, жаль, что поглощение сдерживается отсутствием базовой документации.



Поля "Version" и "Architecture" не требуют пояснений, но другие поля, с которыми у меня возникли проблемы, являются (значения, показанные по состоянию на текущий момент установщик):





  • потоки, параметры posix и win32


  • исключение , варианты dwarf и sjlj


  • Build revision , options 0, 1, 2.


Значения, которые я выбрал в предыдущей установке, были win32, seh и 1 (очевидно, что с тех пор варианты изменились, но я не знаю, что есть что).



Каковы плюсы и минусы каждого варианта, особенно потоковой модели и обработки исключений, а какая версия "лучшая"?



Конкретные проблемы, с которыми я столкнулся, используя x86_64-win32-seh-rev1:





  • std::thread и std::condition_variable не поддерживаются

  • при отладке (используя Code::Blocks в качестве IDE), если исключение выбрасывается, оно не переходит к обработчику исключений; выбор следующей строки ничего не делает 3 раза, а затем прерывает выполнение.


Я могу справиться с проблемой отладки, но было бы действительно здорово иметь рабочие потоки C++11.

764   1  

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

    Ничего не найдено.