OVH Cloud OVH Cloud

Compilation avec MinGW

13 réponses
Avatar
condo4
Bonjour,

J'ai juste un petit probleme et j'ai beau chercher sur le net, je ne
trouve pas de reponce...

Je compile un prog simple utilsant WIN32API, prog qui ne cr=E9=E9 qu'une
toute petite fenetre avec 4 controle (3 textbox et un bouton).

Je compile tres bien, mais voila, mon prog fait plus de 600ko.

J'ai fait des test et aparement des que j'utilise la STL, mon prog
"gonfle" d'un coup!!!

J'ai lut quelque part que c'est du au fait que STL est compiler en mode
debug....

En faite comment faire pour compiler mon prog en Release pour qu'il
prenne une place raisonnable (moin de 100ko je suppose)???

Merci
@+Fab

10 réponses

1 2
Avatar
Fabien LE LEZ
On 22 Jul 2005 08:38:25 -0700, "condo4" :

Je compile tres bien, mais voila, mon prog fait plus de 600ko.


Essaie d'enlever les infos de debug :

strip mon_prog.exe

Avatar
Pierre Maurette
Bonjour,

J'ai juste un petit probleme et j'ai beau chercher sur le net, je ne
trouve pas de reponce...

Je compile un prog simple utilsant WIN32API, prog qui ne créé qu'une
toute petite fenetre avec 4 controle (3 textbox et un bouton).

Je compile tres bien, mais voila, mon prog fait plus de 600ko.

J'ai fait des test et aparement des que j'utilise la STL, mon prog
"gonfle" d'un coup!!!

J'ai lut quelque part que c'est du au fait que STL est compiler en mode
debug....

En faite comment faire pour compiler mon prog en Release pour qu'il
prenne une place raisonnable (moin de 100ko je suppose)???
Souvent, quand on rencontre ce genre de probème, c'est à dire que la

taille de l'exe varie dans un rapport 1 à 10 (voire bien plus) entre
deux compilos ou deux compilations, la solution est dans la quantité de
trucs liés statiquement à l'appli.
On doit bien entendu bien positionner ses switches pour obtenir une
release correcte, et éventuellement utiliser strip, dont l'effet sera
d'autant plus minime que la relesase aura été bien construite.
Je suis à peu près certain d'avoir lu que pour les portages Gcc sous
Windows, la STL était liée statiquement en entier (ou en trop grande
partie). Pour des questions de licence ?
Toujours en est-il que si c'est bien le cas, vous auriez au moins trois
solutions:
- Changer de compilateur, par exemple ce que propose Microsoft en
téléchargement libre. Puisque vos applis sont liées à Windows, c'est
peut-être possible.
- Faire du C (en quelque sorte), c'est à dire ne pas inclure et
utiliser iostream et tout le bataclan.
- Si l'application doit grossir, admettre que le débours, fixe et de
l'ordre de 300 à 500 ko, ne va pas augmenter et donc devenir
supportable.

--
Pour répondre directement: enlever une lettre sur deux
wwaannaaddoooo -> wanadoo

Pierre Maurette

Avatar
tonton
condo4 wrote:
Bonjour,

J'ai juste un petit probleme et j'ai beau chercher sur le net, je ne
trouve pas de reponce...


Etonnant, ca revient toutes les semaines sur la liste mingw-users

http://mingw.org/mingwfaq.shtml#faq-C++size

Je compile un prog simple utilsant WIN32API, prog qui ne créé qu'une
toute petite fenetre avec 4 controle (3 textbox et un bouton).

Je compile tres bien, mais voila, mon prog fait plus de 600ko.

J'ai fait des test et aparement des que j'utilise la STL, mon prog
"gonfle" d'un coup!!!

J'ai lut quelque part que c'est du au fait que STL est compiler en mode
debug....



non. La version debug de libstdc++ ajoute des tests supplentaires, et ce
n'est pas cette version qui est livrée par défaut

En faite comment faire pour compiler mon prog en Release pour qu'il
prenne une place raisonnable (moin de 100ko je suppose)???



g++ -s -o machin.exe truc.o

ou

strip -s machin.exe

Merci
@+Fab



Avatar
condo4
Merci beaucoup, j'ai reussi a reduire la taille de mon prog grace à
votre aide.
Je suis passé de 947ko a 346ko

Un truc me tracasse toujours:

PROG1:
#include <cstdio>
int main(){
printf("HelloWorld");
return 0;
}

PROG2:
#include <iostream>
int main(){
std::cout<<"HelloWorld";
return 0;
}

Je compile avec Gcc sans strip: GCC
Je compile avec Gcc et je strip: GCS
Je compile avec Visual C++ : VC7

PROG1 (C):
GCC = 15 663o
GCS = 5 632o
VC7 = 36 864o

PROG2 (C++):
GCC = 474 990o
GCS = 266 240o
VC7 = 73 728o

Sachant que tout ces executables font a même chose (affiche
"HelloWorld") n'y a-t-il pas des octets de gaspillé???

En plus, j'ai l'impression que Gcc est beaucoup moins gouramand lorsque
l'on utilise les library du C par rapport a VC7, mais tout s'inverse en
C++, et pas a la meme echelle!!!
266 240o contre 73 728o, on trouve quand même une grosse difference!!
Je veut bien admettre que cette difference diminue lorsque le programme
grossi, mais si mon but est de faire des toute petite application, la
taille perdu n'est pas negligeable.

Autre petite question, mais alors, comment StartupXP par exemple, si
vous connaissez, fait pour tenire dans 77 824o alors qu'il utilise des
fenetre, des onglets....

Y'a un truc qui m'échappe dans la programmation......

@+Fab
Avatar
Fabien LE LEZ
On 25 Jul 2005 05:27:06 -0700, "condo4" :

PROG2 (C++):
GCC = 474 990o
GCS = 266 240o
VC7 = 73 728o


Il y a des chances pour que le linker de gcc optimise mal : certaines
fonctions restent dans l'exécutable alors qu'elles ne sont jamais
appelées.

J'imagine qu'à l'heure de l'ADSL, et alors qu'un PC de base est vendu
avec 120 Go de disque dur et pas de lecteur de disquettes, plus
personne ne se préoccupe de la taille des exécutables...

Avatar
Arnaud Meurgues
Fabien LE LEZ wrote:

J'imagine qu'à l'heure de l'ADSL, et alors qu'un PC de base est vendu
avec 120 Go de disque dur et pas de lecteur de disquettes, plus
personne ne se préoccupe de la taille des exécutables...


Déjà qu'avant...
Je ne sais pas si quelqu'un a déjà regardé la taille d'un Hello World
écrit en Eiffel...

Arnaud

Avatar
Fabien LE LEZ
On Mon, 25 Jul 2005 15:03:38 +0200, Arnaud Meurgues
:

Je ne sais pas si quelqu'un a déjà regardé la taille d'un Hello World
écrit en Eiffel...


À l'opposé, un "Hello World!" prend 12 octets en PHP ;-)
[Bon, évidemment, si on compte l'interpréteur, ça fait un peu plus...]

Avatar
Arnaud Meurgues
Fabien LE LEZ wrote:

Je ne sais pas si quelqu'un a déjà regardé la taille d'un Hello World
écrit en Eiffel...
À l'opposé, un "Hello World!" prend 12 octets en PHP ;-)

[Bon, évidemment, si on compte l'interpréteur, ça fait un peu plus...]


Je connais un mec qui s'était amusé à écrire un compilateur (sur Amiga)
avec la contrainte qu'il devait faire moins de 1ko. Il avait donc écrit
un compilateur de 1023 octets avec un langage adhoc (instructions
monocaractère, mais avec lambda).

Et c'était un exécutable indépendant !

Arnaud


Avatar
Arnaud Meurgues
Arnaud Meurgues wrote:

un compilateur de 1023 octets avec un langage adhoc (instructions


Oups. Le compilo faisait exactement 1024 octets. Pardon.

http://wouter.fov120.com/false/index.html

--
Arnaud

Avatar
tonton
This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enig994381B45F9A343157BE8F88
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

condo4 wrote:
Merci beaucoup, j'ai reussi a reduire la taille de mon prog grace à
votre aide.
Je suis passé de 947ko a 346ko

[snip]


Sachant que tout ces executables font a même chose (affiche
"HelloWorld") n'y a-t-il pas des octets de gaspillé???

En plus, j'ai l'impression que Gcc est beaucoup moins gouramand lorsque
l'on utilise les library du C par rapport a VC7, mais tout s'inverse en
C++, et pas a la meme echelle!!!


VC7 utilise des dll pour le c et c++ qui sont livrées par défaut avec
windows.
VC7.1 utilise des dll différentes pour le c et le c++ (msvcrt71.dll et
je sait plus quoi pour le c++), qui doivent etre livrées avec le prog s i
l'os de destination n'est pas XP
GCC n'utilise pas de dll pour le c++, tout est intégré dans
l'application. Par contre pour le c il utilise la meme dll que vc7
(msvcrt.dll)

266 240o contre 73 728o, on trouve quand même une grosse difference!!
Je veut bien admettre que cette difference diminue lorsque le programme
grossi, mais si mon but est de faire des toute petite application, la
taille perdu n'est pas negligeable.

Si la taille est un problème, alors on peut compresser l'exe avec upx

(http://upx.sf.net) par exemple. De nombreux virus sont d'ailleurs
compressés pour en réduire la taille

Autre petite question, mais alors, comment StartupXP par exemple, si
vous connaissez, fait pour tenire dans 77 824o alors qu'il utilise des
fenetre, des onglets....

Y'a un truc qui m'échappe dans la programmation......


Il y a encore des personnes qui utilisent l'asm pour faire des progs ...

@+Fab





--------------enig994381B45F9A343157BE8F88
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFC5V3QZmUHKLzaTmIRAh32AJ4k7qegKEHICB9GmjR7jOs/H3XPQACggI8r
+kZnzSdVEVK8GwoFyzTM2hQ =AJb8
-----END PGP SIGNATURE-----

--------------enig994381B45F9A343157BE8F88--

1 2