web-dev-qa-db-fra.com

Signification des options du programme d'installation de Mingw-W64

Dans l'installateur en ligne MinGW-W64, vous pouvez sélectionner plusieurs champs. Cependant, je ne trouve aucune documentation à ce sujet, et les suppositions que j'ai faites ne me donnent pas le comportement que je veux.

De toute évidence, beaucoup de travail a été consacré à ce projet, il semble donc dommage que l'adoption soit freinée par le manque de documentation de base.

Les champs "Version" et "Architecture" sont explicites mais les autres champs avec lesquels je rencontre des problèmes sont (les valeurs sont celles de l'installateur actuel):

  • Threads, options posix et win32
  • Exception, options dwarf et sjlj
  • révision de la version, options 0, 1, 2.

Les valeurs que j'ai choisies lors de mon installation précédente étaient win32, seh et 1 (il est clair que les options ont changé depuis, mais je ne suis pas plus sage quant à ce qui est quoi).

Quels sont les avantages et les inconvénients de chaque option, en particulier le modèle de filetage et la gestion des exceptions, et quelle version est la "meilleure"?

Les problèmes spécifiques que j'ai rencontrés en utilisant x86_64-win32-seh-rev1 sont:

  • std::thread et std::condition_variable ne sont pas pris en charge
  • Lors du débogage (en utilisant Code :: Blocks comme IDE), si une exception est levée, elle ne saute pas au gestionnaire d'exceptions; la sélection de la ligne suivante ne fait rien 3 fois, puis abandonne la course.

Je peux faire face au problème de débogage, mais ce serait vraiment bien d'avoir des threads C++ 11 fonctionnels.

39
M.M

Exceptions

Veuillez voir cette réponse pour les trois modèles (nain, sjlj et seh) .

Fils

Vous pouvez décider quel type de threads vous souhaitez utiliser: threads POSIX ou threads API Windows. Les fils posix ont l'avantage de la portabilité; vous pouvez utiliser votre code sur d'autres plateformes posix (par exemple linux) sans modifications. L'API de threading win32 est uniquement Windows. Si vous êtes à 100% sur Windows et que c'est l'api, ce n'est pas un problème.

Si vous utilisez de nouvelles fonctionnalités C++ comme std::thread l'impact est moins visible car vous disposez déjà d'une API standard pour le filetage. Je ne sais pas s'il y a vraiment une grande différence si vous n'utilisez pas directement l'api de thread posix-/win32 (peut-être std::thread poignées natives?)

Voir aussi: threads mingw-w64: posix vs win32

Révision de la build

Je suppose que ce n'est qu'un autre numéro de version puisque Mingw (-w64) suit les versions de GCC (4.8.x, 4.9.x etc.). Si vous n'avez pas besoin d'une version spécifique, vous devez utiliser la dernière version.

Problème de filetage

Si l'exception levée est:

terminate called after throwing an instance of 'std::system_error'
  what():  Enable multithreading to use std::thread: Operation not permitted

alors juste lien pthreads - et le problème est résolu.


Recommandation

Si vous n'avez pas de raisons d'utiliser une option spécifique; ma recommandation personnelle:

posix - dwarf - 2
  • Posix activer C++ 11 <thread>, <mutex> et <future>
  • nain est plus rapide
  • 2 car c'est la dernière version
22
ollo