IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

std::except class et flag -fexception


Sujet :

C++

  1. #1
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut std::except class et flag -fexception
    Bonjour,

    Je dois faire une confusion quelquepart à propo des exception. Je compile une application C++ avec minGW que je distribue avec la dll "mingwm10.dll". J'avais comme option de compilation ou linkage je ne sais plus "-fexceptions"

    De plus dans mon code j'utilise beaucoup la class std::exception

    J'ai lu que je piouvais me passer de cette dll si je ne lier pas avec l'option "-fexceptions", ce que j'ai fais. Et ca fonctionne.

    Maintenant, je ne comprend pas pourqoui je n'ai pas de probléme avec mes routines ou object utilisant std::exception. Cela ne devrait-il avoir un lien avec l'option de linkage "-fexecption"

    Merci de vos lumiéres.

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 633
    Par défaut
    Salut,

    Pour autant que je sache, mingwm10.dll est la bibliothèque dynamique fournissant les informations de runtime, et est donc l'équivalent des msvcrt_xx.dll.

    C'est dans cette dll que se trouve l'implémentation detoutes les fonctions invoquées automatiquement avant d'entrer dans le main et après en être sorti.

    Le seul moyen de s'en passer est d'utiliser non plus la dll mais la version statique de la bibliothèque. Et il est, si j'ai bon souvenir, possible de faire cohabiter les version statiques et dynamiques

    De son coté, le flag -fexception n'est nécessaire que lorsque l'on compile un programme C qui doit être capable d'opérer correctement avec un programme écrit en C++:
    Citation Envoyé par le site de GCC
    Enable exception handling. Generates extra code needed to propagate exceptions. For some targets, this implies GCC will generate frame unwind information for all functions, which can produce significant data size overhead, although it does not affect execution. If you do not specify this option, GCC will enable it by default for languages like C++ which normally require exception handling, and disable it for languages like C that do not normally require it. However, you may need to enable this option when compiling C code that needs to interoperate properly with exception handlers written in C++. You may also wish to disable this option if you are compiling older C++ programs that don't use exception handling. (sources)
    Les deux n'ont donc pas grand chose à voir l'un avec l'autre

    De plus, si problème il y a au niveau de la gestion des exceptions, on rencontre généralement deux cas distincts:

    Le lancement dans une bibliothèque statique (ou l'application elle-même) d'une exception non récupérée
    Le lancement dans une bibliothèque dynamique qui n'est pas récupérée avant que la remontée de la pile d'appel ne fasse sortir l'exécution de la dll.

    Dans le premier cas, tu aura "simplement" un message "classique" te disant que l'application a été interrompue et a lancé une exception

    Dans le second cas, tu aura un message t'expliquant que la dll machin chose a lancé une exception qui n'a pas été gérée.

    Il *semble* possible, en tripatouillant les options de compilations, d'arriver à faire qu'une sortie de dll sur exception non gérée ne soit pas synonyme de plantage brutal, mais je n'ai pas les informations sur la manière de s'y prendre sous la main.

    En définitive, on pourrait donc dire que, s'il te manque un (ou plusieurs) bloc catch, ton application peut parfaitement fonctionner tant... qu'aucune exception ne sera lancée (ou planter n'importe quand, selon que l'on soit optimiste ou pessimiste ) et que, d'un autre coté, si toute exception lancée est récupérée au plus tard dans la première fonction d'un module (ou d'une dll), la présence ou l'absence du flag -fexceptions ne changera strictement rien
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Ok, ca parait comme ca assez complexe, je vais méditer tout ca. En tout cas, merci d'avoir pris le temps de me répondre.

    Sinon, As-tu une idée de la maniére de creer, une librarie static de "mingwm10.dll"

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 633
    Par défaut
    Oh, le plus simplement du monde, si tu dispose de MSYS (disponible sur le site de MingGW)...
    • Récupérer les sources de mingwruntime (précisément mingwrt-3.17-mingw32-src.tar.gz, au moment d'écrire ce message)
    • décompresser l'archive
    • configurer en passant les options --enable-static --disable-shared
    • make
    • make install


    N'oublie pas l'option prefix

    Pour information, le fait que tu ne doive pas forcément placer mingwm10.dll dans le dossier d'une application compilée avec MinGW peut n'être du qu'au fait que mingwm10.dll se trouve dans un dossier connu... par la variable PATH
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Ok j'ai suivi ta procédure et créer une library "mingwm.a" que j'ai incluse à mon project. Mais maheureusement, au démarrage il me demande toujours mingwm10.dll sous windows. Visiblement ca ne suffit pas.

Discussions similaires

  1. std::exception: avec ou sans string?
    Par Kurisu dans le forum SL & STL
    Réponses: 2
    Dernier message: 14/07/2008, 15h14
  2. std::deque<Class> erase decale les pointeurs ?
    Par Plorf dans le forum SL & STL
    Réponses: 2
    Dernier message: 12/05/2008, 11h10
  3. Réponses: 8
    Dernier message: 07/08/2007, 17h21
  4. Je ne parviens pas à catch ma std::exception !
    Par jomeo dans le forum SL & STL
    Réponses: 2
    Dernier message: 30/03/2007, 12h29
  5. unhandled exception class System.SecurityException
    Par the big ben 5 dans le forum Langage
    Réponses: 2
    Dernier message: 02/11/2005, 17h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo