Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 25/10/2008, à 09:26

francois_c

[Résolu] Console en c - Question idiote + Cross-compilation

Il y a des années (15 ans au moins) que je n'avais pas touché au C, mais je suis comme les vieux alcoolos,  je me remets un peu depuis quelques jours à compiler des plugins de Gimp notamment (avec les outils intégrés à Ubuntu sous Linux et avec MinGW/msys pour Windows), parce que ça fait plaisir aux copains, qui croient que c'est difficile.

Ma question idiote pour ceux qui savent (et j'ai peut-être su jadis) : pourquoi ai-je une console noire qui s'ouvre pour les plugins (non gimptool) sous Windows alors que je n'en ai pas sous Linux ? Et comment font ceux qui n'en ont pas ? cela vient de m'arriver : j'ai compilé sans voir qu'il y avait des binaires précompilés dans le paquetage. Les miens faisaient une vilaine fenêtre noire sous Win, alors que les autres n'en faisaient pas sad

J'ai fait un autre essai : un programme C basique avec une boîte de message cross-compilé sous Ubuntu avec MinGW. Il n'ouvre pas de fenêtre avec Wine, et il en fait une avec Windows. Pareil quand la compilation est native Windows (sauf que le binaire est plus petit). J'ai les mêmes résultats en utilisant Code::Blocks (Ubuntu ou Windows).

Question subsidiaire : est-ce que ça vaut la peine de cross-compiler sous Linux pour Windows ? on fait quand même plaisir aux copains et on garde un environnement de compilation plus rapide et plus pratique, mais les binaires semblent nettement plus gros.

Dernière modification par francois_c (Le 26/10/2008, à 18:36)


Ubuntu Studio 16.04 64 bits. Dual-booter Linux/Windows depuis la fin du siècle dernier.

Hors ligne

#2 Le 25/10/2008, à 11:00

rniamo

Re : [Résolu] Console en c - Question idiote + Cross-compilation

- mieux vaut compiler sous linux pour linux et sous win pour win (question bête réponse bête wink)
- pour l'histoire des fenêtre sous windows dans les options du programme (clic droit propriétés, tu peux définir si tu lance la fenêtre dos ou pas)
- pour les plugins je ne vois pas de quoi tu parles, si tu pouvais envoyer un screen...


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#3 Le 25/10/2008, à 13:02

francois_c

Re : [Résolu] Console en c - Question idiote + Cross-compilation

Merci pour cette réponse rapide.

Pour les plugins compilés sous MinGW/msys Windows, c'est exactement le même problème de C que pour les autres logiciels en c :

2971558988_258fa65147.jpg

J'ai un peu décalé la fenêtre Windows pour qu'on voie mieux la console derrière. Ce plugin, fondé sur un code analogue à celui de Gexif, n'était pas disponible pour Windows à ma connaissance, mais j'aimerais bien que ceux qui l'utilisent soient dispensés de ce rectangle noir qui n'apparaît pas sous Ubuntu. Il semble que les plugins compilés avec gimptool-2.0 soient exempts de cet inconvénient.

Figure-toi que j'ai pensé juste avant d'écrire à cette configuration des propriétés, mais je ne trouve rien d'explicite sous XP. Où est-ce ? Le menu du bouton droit me donne accès à différents modes de compatibilité, etc., mais pas à ce dont tu parles.

Il faudrait sûrement que je précise quelque part que je veux faire une application Win32 GUI et non une application console. Ça marche par exemple avec Lazarus sans problème. Mais j'ai fait des essais sous Windows d'applis Windows vides avec Code::Blocks, et il y a toujours une fenêtre noire derrière yikes.

Dernière modification par francois_c (Le 25/10/2008, à 13:23)


Ubuntu Studio 16.04 64 bits. Dual-booter Linux/Windows depuis la fin du siècle dernier.

Hors ligne

#4 Le 25/10/2008, à 13:29

rniamo

Re : [Résolu] Console en c - Question idiote + Cross-compilation

sous codeblocks tu peux préciser cela dans les options du projet je crois, tu choisis "Win32 GUI" (ou quelquechose comme ça) à la place de "console application"

Dernière modification par rniamo (Le 25/10/2008, à 13:30)


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#5 Le 25/10/2008, à 13:39

francois_c

Re : [Résolu] Console en c - Question idiote + Cross-compilation

Ben oui, mais ça fait quand même une fenêtre noire sous Windows sad:(:(


Ubuntu Studio 16.04 64 bits. Dual-booter Linux/Windows depuis la fin du siècle dernier.

Hors ligne

#6 Le 25/10/2008, à 13:55

rniamo

Re : [Résolu] Console en c - Question idiote + Cross-compilation

non (testé wink)

edit : vérifie que le mode de compilation (debug ou release) est celui ou tu a configuré le projet.

Dernière modification par rniamo (Le 25/10/2008, à 13:58)


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#7 Le 25/10/2008, à 15:52

francois_c

Re : [Résolu] Console en c - Question idiote + Cross-compilation

Bien vu. C'est ce que j'ai compris juste avant de trouver ta réponse : je venais justement te dire que j'avais trouvé mon erreur.

Mais maintenant, ce que je voudrais savoir, c'est où se trouve, dans les fichiers du projet, l'instruction qui dit au compilateur C de ne pas ouvrir de fenêtre, pour pouvoir la réutiliser dans la compilation des sources de plugins (non gimptool) de Gimp avec msys, sans passer par codeblocks. À moins que tu saches un moyen de les convertir en projets pour codeblocks.


Ubuntu Studio 16.04 64 bits. Dual-booter Linux/Windows depuis la fin du siècle dernier.

Hors ligne

#8 Le 25/10/2008, à 16:29

rniamo

Re : [Résolu] Console en c - Question idiote + Cross-compilation

je ne connais pas du tout la syntaxe plugin pour gimp, lire les fichiers de config cb est assez lourd, t'as pas un tuto pour les plugins, je regarde si je vois quelque chose qui me semble évident wink


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#9 Le 25/10/2008, à 16:42

francois_c

Re : [Résolu] Console en c - Question idiote + Cross-compilation

Il ne s'agit pas ici de la syntaxe plugin pour Gimp. C'est une question liée au C à mon avis.

je viens d'examiner le fichier XML produit par codeblocks :

Pour Release, il donne les options de compilation :

            <Target title="Release">
                <Option output="bin\Release\temp2" prefix_auto="1" extension_auto="1" />
                <Option object_output="obj\Release\" />
                <Option type="0" />
                <Option compiler="gcc" />
                <Compiler>
                    <Add option="-O2" />
                </Compiler>
                <Linker>
                    <Add option="-s" />
                </Linker>

Et pour Debug :

            <Target title="Debug">
                <Option output="bin\Debug\temp2" prefix_auto="1" extension_auto="1" />
                <Option object_output="obj\Debug\" />
                <Option type="1" />
                <Option compiler="gcc" />
                <Compiler>
                    <Add option="-g" />
                </Compiler>
            </Target>

J'ai modifié dans le Makefile d'un plugin qui ne demande pas de ./configure :
CC = gcc -g
en :
CC = gcc -O2 -s

Ce n'était pas encore ça, mais j'ai déjà obtenu des exécutables 8 fois plus petits ! Christophe Colomb a bien trouvé l'Amérique en cherchant les Indes. Mais je veux aussi les Indes...

Dernière modification par francois_c (Le 25/10/2008, à 16:44)


Ubuntu Studio 16.04 64 bits. Dual-booter Linux/Windows depuis la fin du siècle dernier.

Hors ligne

#10 Le 25/10/2008, à 16:46

rniamo

Re : [Résolu] Console en c - Question idiote + Cross-compilation

-g c'est debug je crois et -O2 c'est optimisation niveau 2. -s je ne connais pas

http://www.cppfrance.com/codes/CACHER-F … _9270.aspx

Dernière modification par rniamo (Le 25/10/2008, à 16:50)


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#11 Le 25/10/2008, à 17:19

francois_c

Re : [Résolu] Console en c - Question idiote + Cross-compilation

J''ai essayé FreeConsole(); Mais on ne peut pas inclure windows.h parce qu'il doit être en conflit avec gtk.h.

Alors, ça passe à la compilation (sans windows.h) mais ça ne fait rien.

Bon ; il faut que je pense à autre chose, parce que je tourne au nerd. Si tu trouves, tu me dis, hein ?


Ubuntu Studio 16.04 64 bits. Dual-booter Linux/Windows depuis la fin du siècle dernier.

Hors ligne

#12 Le 25/10/2008, à 17:50

rniamo

Re : [Résolu] Console en c - Question idiote + Cross-compilation

et ShowWindow(hwnd, SW_HIDE); ?


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#13 Le 25/10/2008, à 17:54

francois_c

Re : [Résolu] Console en c - Question idiote + Cross-compilation

Bon, tu dois connaître ça, j'ai étaint le PC, fumé une clope, et je n'ai pas pu m'empêcher de rallumer le PC aussitôt, parce que :
conclusion : je suis un vrai bourrin.
Dans le cas de ce plugin, je m'obstinais tout simplement à exécuter le Make pour Linux au lieu de celui pour Windows (on ne rit pas, SVP). On dit que le tabac fait du mal, mais ça aide à réfléchir...
Cela peut bien être la même chose pour les autres...
Merci : le dialogue avec toi m'a quand même bien aidé et stimulé.

Dernière modification par francois_c (Le 25/10/2008, à 17:55)


Ubuntu Studio 16.04 64 bits. Dual-booter Linux/Windows depuis la fin du siècle dernier.

Hors ligne

#14 Le 25/10/2008, à 18:00

rniamo

Re : [Résolu] Console en c - Question idiote + Cross-compilation

ça je connais wink (pourquoi il trouve pas pkg-config ?lol)


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#15 Le 25/10/2008, à 18:30

francois_c

Re : [Résolu] Console en c - Question idiote + Cross-compilation

Mais pour les autres c'est un peu plus compliqué : ce paquet avait trois makefile parce qu'il n'avait pas de configure, sans doute. C'était celui qui contenait déjà des binaires Windows que je n'avais pas vus d'abord - donc la preuve qu'on pouvait compiler sans console. J'ai eu en prime le plaisir de faire des binaires mieux optimisés que ceux de l'auteur.
Pour les autres, c'est un peu moins simple. Il va falloir voir avec configure.

Édité le 26/10/08

Trouvé la solution : c'est une option du linker. Il faut ajouter le commutateur -mwindows à la ligne de commande. Par exemple comme ça :

./configure CFLAGS=-s LDFLAGS=-mwindows

Dernière modification par francois_c (Le 26/10/2008, à 22:17)


Ubuntu Studio 16.04 64 bits. Dual-booter Linux/Windows depuis la fin du siècle dernier.

Hors ligne

#16 Le 26/10/2008, à 21:36

francois_c

Re : [Résolu] Console en c - Question idiote + Cross-compilation

rniamo a écrit :

-g c'est debug je crois et -O2 c'est optimisation niveau 2. -s je ne connais pas

http://www.cppfrance.com/codes/CACHER-F … _9270.aspx

C'est strip, je crois.


Ubuntu Studio 16.04 64 bits. Dual-booter Linux/Windows depuis la fin du siècle dernier.

Hors ligne