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

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

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

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

  • темы, options posix и win32
  • исключение, options dwarf и sjlj
  • построить редакции, options 0, 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) без изменений. API потоков win32-это только windows. Если вы на 100% в windows и, как это api, это не проблема хотя.

если вы используете новые функции C++ как std::thread влияние менее заметно, так как у вас уже есть стандартный api для потоковой передачи. Я не уверен, что есть действительно большая разница, если вы не используете posix- / win32 thread api напрямую (возможно,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 потому что это последняя версия