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

wxWidgets Discussion :

Segfault en compilant avec Code::Blocks sous Windows


Sujet :

wxWidgets

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 81
    Points : 50
    Points
    50
    Par défaut Segfault en compilant avec Code::Blocks sous Windows
    Bonjour,
    voulant m'initier à wxWidgets, j'essaie de compiler l'exemple minimal du dossier sample. En utilisant le makefile "makefile.gcc", la compilation s'effectue sans problème et l'exécution aussi. Quand j'utilise Code::Blocks, la compilation fonctionne sans erreurs mais l’exécution génère une erreur de segmentation. Je pense n'avoir pas configuré suffisamment bien le projet, mais je n'arrive pas à déterminer ce qui manque.

    Pour infos, j'ai compilé wxWidgets avec: mingw32-make -f makefile.gcc BUILD=release SHARED=1 UNICODE=1 et de même pour l'exemple minimal.
    Voici le fichier minimal.cbp (en fin de post), gérant la compilation.

    J'ai aussi essayé avec d'autres codes trouvés sur internet (en modifiant le makefile) et j'ai le même problème.

    Avez-vous déjà rencontré cela et savez-vous le régler ?

    Merci,

    Simac

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <CodeBlocks_project_file>
    	<FileVersion major="1" minor="6" />
    	<Project>
    		<Option title="minimal" />
    		<Option pch_mode="2" />
    		<Option compiler="gcc" />
    		<Build>
    			<Target title="Release">
    				<Option output="bin/Release/minimal" prefix_auto="1" extension_auto="1" />
    				<Option object_output="obj/Release/" />
    				<Option type="0" />
    				<Option compiler="gcc" />
    				<Option projectCompilerOptionsRelation="2" />
    				<Compiler>
    					<Add option="-O2" />
    					<Add directory="C:/wxWidgets-3.0.3/lib/gcc_dll/mswu" />
    				</Compiler>
    				<Linker>
    					<Add option="-s" />
    					<Add library="libwxmsw30u_core.a" />
    					<Add library="libwxbase30u.a" />
    				</Linker>
    			</Target>
    		</Build>
    		<Compiler>
    			<Add option="-Wall" />
    			<Add option="-pipe" />
    			<Add option="-mthreads" />
    			<Add option="-finput-charset=iso-8859-15" />
    			<Add option="-D__GNUWIN32__" />
    			<Add option="-D__WXMSW__" />
    			<Add option="-DWXUSINGDLL" />
    			<Add option="-DwxUSE_UNICODE" />
    			<Add option="-D_UNICODE_" />
    			<Add directory="C:/wxWidgets-3.0.3/include" />
    		</Compiler>
    		<Linker>
    			<Add library="libkernel32.a" />
    			<Add library="libuser32.a" />
    			<Add library="libwinspool.a" />
    			<Add library="libcomdlg32.a" />
    			<Add directory="C:/wxWidgets-3.0.3/lib/gcc_dll" />
    		</Linker>
    		<Unit filename="../sample.rc">
    			<Option compilerVar="WINDRES" />
    		</Unit>
    		<Unit filename="minimal.cpp" />
    		<Extensions>
    			<code_completion />
    			<envvars />
    			<debugger />
    			<lib_finder disable_auto="1" />
    		</Extensions>
    	</Project>
    </CodeBlocks_project_file>

  2. #2
    Membre averti Avatar de wxXav
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Décembre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur amateur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 214
    Points : 354
    Points
    354
    Par défaut
    Bonjour.

    Je ne pense pas que le problème vienne de la configuration de Code::Blocks.

    J'ai fait le test (en modifiant les chemins d'accès aux libs pour que ça corresponde à mon installation) et ça a fonctionné.

    Par contre, je pense que tu utilises une version un peu obsolète de Code::Blocks (une version "officielle" avec installateur et éventuellement MinGW intégré).
    Parce que moi il a fallu que je rajoute un répertoire pour le compilateur de ressources sans quoi la compilation du fichier ".rc" échouait.

    Je te conseille d'essayer d'utiliser une version "Nightly-Build" de Code::Blocks (regarde sur le forum officiel, tu trouveras facilement la dernière).
    Tu devrais pouvoir remplacer ta version actuelle par une version plus récente.

    @+
    Xav'

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 81
    Points : 50
    Points
    50
    Par défaut
    Ok merci, je vais essayer la nightly-build (j'avais bien la dernière version officielle: 16.01).

    En passant, j'ai compilé le projet en utilisant le makefile à partir de Code::Blocks (dans les options de projet) et le log du compilateur est exactement le même, au caractère près, que lorsque je lance le makefile à la main. Pourtant, l’exécutable résultant est totalement différent: avec Code::Blocks il pèse 1Mo (et plante) alors qu'à la main il fait 3Mo (et marche). J'utilise pour les deux MinGW livré avec Code::Blocks.

    Je vais installer la nighty-build, et je te tiens au courant.

    Simac

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 81
    Points : 50
    Points
    50
    Par défaut
    Bon, j'ai utilisé la version nightly-build et malheureusement, rien a changé. Par contre je n'ai pas modifié le compilateur (je ne sais pas si il existe une version plus récente de MinGW que celle utilisant GCC 4.9 ; j'ai vu que GCC 7.1 est sorti, mais il ne me semble pas qu'il y ai de MinGW correspondant).
    Je continue les recherches...

  5. #5
    Membre averti Avatar de wxXav
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Décembre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur amateur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 214
    Points : 354
    Points
    354
    Par défaut
    Est-ce qu'à tout hasard il se pourrait que tu aies 2 versions de MinGW différentes qui trainent ?
    C'est souvent le cas quand par exemple tu as une version de Qt installée.

    Quand tu compiles avec le Makefile directement sans passer par Code::Blocks, je suppose que tu ouvres simplement une fenêtre "invite de commandes".
    Dans ce cas, regardes si la version de gcc correspond à celle installée avec Code::Blocks.

    Ça pourrait expliquer les problèmes que tu rencontres.

    Il y a autre chose qui est inquiétant : la grosse différence entre les deux exécutables compilés depuis le Makefile.
    Puisque apparement tu utilises une version "shared" des libs, il n'est pas normal d'obtenir un exe de 3Mo pour l'exemple minimal.
    Même 1Mo me paraît beaucoup (mais je n'ai pas de Windows ouvert sous la main actuellement : je ferai le test demain pour voir quelle taille j'obtiens).

    Je te tiens au courant.

    @+
    Xav'

  6. #6
    Membre averti Avatar de wxXav
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Décembre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur amateur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 214
    Points : 354
    Points
    354
    Par défaut
    Bon : je viens de faire quelques vérifications.

    Compilation avec le makefile fourni : 1.15Mo
    Compilation avec ton fichier projet Code::Blocks : 563Ko

    L'écart entre les deux vient du fait que le make file n'utilise pas l'option "-s" lors du link.
    Je l'ai rajouté manuellement et j'obtiens exactement la même taille (563ko).

    Comme j'utilise une version un peu viellotte de MinGW (la version 4.8.1-TDM), il est normal que j'obtienne un exécutable plus petit que toi, mais l'écart me paraît quand même trop important.

    @+
    Xav'

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 81
    Points : 50
    Points
    50
    Par défaut
    J'ai bien deux versions de MinGW sur mon ordi, je verrai ça ce soir.

    PS: Maintenant que j'y pense, j'avais compilé boost et il me semble que le logiciel utilisait les chemins dans le PATH. En tout cas, certaines instructions de boost (genre gestion de fichiers) font planter mes programmes... Je pense qu'il y a un lien.

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 81
    Points : 50
    Points
    50
    Par défaut
    Meh !
    Au moins, je n'ai pas de conflit entre les versions de MinGW : seule celle de Code::Blocks est présente dans le es variables d'environnement.
    J'ai aussi essayé en utilisant le chemin complet pour lancer mingw32-make.exe, et le résultat est le même...

    Pour la taille des exécutables, j'ai mis l'option "-s" : celui créé en ligne de commande pèse maintenant 608Ko et celui avec Code::Blocks 606Ko.

    Je précise que pour Code::Blocks je ne compile plus avec les paramètres du projet, mais j'utilise le makefile :

    Nom : makefile_in_project.png
Affichages : 143
Taille : 23,9 Ko

    Ainsi, tant que ce système ne fonctionnera pas, je saurais que ça foire quelque part.

    Ah les fausses joies !

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 81
    Points : 50
    Points
    50
    Par défaut
    Bon, le sujet s'éloigne un peut de wxWidgets, je vais aller voir les forums spécialisés en Code:: Blocks...

    En tout cas, merci à toi de m'avoir aidé. Tu m'a permis de localiser l'erreur

    Simac

  10. #10
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Février 2006
    Messages : 562
    Points : 859
    Points
    859
    Par défaut
    Bonsoir simac. Vous dites avez localisé l'erreur mais vous ne précisez pas cette erreur. Avez-vous résolu votre problème initial (c'est à dire le plantage de votre exécutable sous C::B) ? L'écart de taille de vos exécutables est en effet trop important entre les deux modes de compilation.
    Je viens de faire un test rapide du "sample minimal" mais avec une version de wxWidgets 3.0.2 compilé en MONOLITHIC (une seule DLL regroupant tous les modules de WX) et j'obtiens un exécutable de 533 ko qui se lance sans erreur.

  11. #11
    Membre averti Avatar de wxXav
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Décembre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur amateur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 214
    Points : 354
    Points
    354
    Par défaut
    Hello
    Citation Envoyé par ddaime Voir le message
    L'écart de taille de vos exécutables est en effet trop important entre les deux modes de compilation.
    Je viens de faire un test rapide du "sample minimal" mais avec une version de wxWidgets 3.0.2 compilé en MONOLITHIC (une seule DLL regroupant tous les modules de WX) et j'obtiens un exécutable de 533 ko qui se lance sans erreur.
    Je me permets de répondre à sa place :
    Citation Envoyé par simac Voir le message
    Pour la taille des exécutables, j'ai mis l'option "-s" : celui créé en ligne de commande pèse maintenant 608Ko et celui avec Code::Blocks 606Ko.
    Le problème venait du fait que le makefile utilisé par Code::Blocks n'utilisait pas l'option "-s" au link.

    @+
    Xav'

  12. #12
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 81
    Points : 50
    Points
    50
    Par défaut
    Bonjour,
    Citation Envoyé par ddaime Voir le message
    Vous dites avez localisé l'erreur mais vous ne précisez pas cette erreur. Avez-vous résolu votre problème initial (c'est à dire le plantage de votre exécutable sous C::B) ?
    Non je n'ai pas résolu, ni même trouvé, l'erreur. Je sais juste qu'elle se situe au niveau de la génération des fichiers objets, mais pas pourquoi elle est présente.

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 81
    Points : 50
    Points
    50
    Par défaut
    Au final j'avais bien deux versions de MinGW, mais aussi une troisième version de gcc qui était présente dans le PATH et dont je n'aurais jamais soupçonné l’existence...
    J'ai donc viré cette version du PATH, recompilé wxWidgets, et tout fonctionne à merveille.
    Pour trouver le chemin du gcc utilisé avec cmd, j'ai utilisé la commande where gcc.
    Juste vérifier la version de mingw32-make ne suffit donc pas.

    Je n'ai qu'une seule chose à ajouter:

    Merci à vous de m'avoir consacré votre temps !

    Simac

+ Répondre à la discussion
Cette discussion est résolue.

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