 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
condo4 Guest
|
Posted: Fri Jul 22, 2005 3:38 pm Post subject: Compilation avec MinGW |
|
|
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)???
Merci
@+Fab
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Fri Jul 22, 2005 4:26 pm Post subject: Re: Compilation avec MinGW |
|
|
On 22 Jul 2005 08:38:25 -0700, "condo4" <c4 (AT) saint-pal (DOT) com>:
| Quote: | Je compile tres bien, mais voila, mon prog fait plus de 600ko.
|
Essaie d'enlever les infos de debug :
strip mon_prog.exe
|
|
| Back to top |
|
 |
Pierre Maurette Guest
|
Posted: Fri Jul 22, 2005 5:58 pm Post subject: Re: Compilation avec MinGW |
|
|
condo4, le 22/07/2005, a écrit :
| Quote: | 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
|
|
| Back to top |
|
 |
tonton Guest
|
Posted: Fri Jul 22, 2005 9:38 pm Post subject: Re: Compilation avec MinGW |
|
|
condo4 wrote:
| Quote: | 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
| Quote: | 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
| Quote: | 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
|
|
| Back to top |
|
 |
condo4 Guest
|
Posted: Mon Jul 25, 2005 12:27 pm Post subject: Re: Compilation avec MinGW |
|
|
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
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Mon Jul 25, 2005 12:40 pm Post subject: Re: Compilation avec MinGW |
|
|
On 25 Jul 2005 05:27:06 -0700, "condo4" <c4 (AT) saint-pal (DOT) com>:
| Quote: | 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...
|
|
| Back to top |
|
 |
Arnaud Meurgues Guest
|
Posted: Mon Jul 25, 2005 1:03 pm Post subject: Re: Compilation avec MinGW |
|
|
Fabien LE LEZ wrote:
| Quote: | 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
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Mon Jul 25, 2005 1:11 pm Post subject: Re: Compilation avec MinGW |
|
|
On Mon, 25 Jul 2005 15:03:38 +0200, Arnaud Meurgues
<news.arnaud (AT) meurgues (DOT) non.fr.invalid>:
| Quote: | 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...]
|
|
| Back to top |
|
 |
Arnaud Meurgues Guest
|
Posted: Mon Jul 25, 2005 1:27 pm Post subject: Re: Compilation avec MinGW |
|
|
Fabien LE LEZ wrote:
| Quote: | 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
|
|
| Back to top |
|
 |
Arnaud Meurgues Guest
|
Posted: Mon Jul 25, 2005 1:31 pm Post subject: Re: Compilation avec MinGW |
|
|
Arnaud Meurgues wrote:
| Quote: | 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
|
|
| Back to top |
|
 |
tonton Guest
|
Posted: Mon Jul 25, 2005 9:46 pm Post subject: Re: Compilation avec MinGW |
|
|
condo4 wrote:
| Quote: | 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 si
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)
| Quote: | 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
| Quote: | 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 ...
-----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-----
|
|
| Back to top |
|
 |
Martinez Jerome Guest
|
Posted: Tue Jul 26, 2005 8:43 am Post subject: Re: Compilation avec MinGW |
|
|
tonton wrote:
| Quote: | VC7 utilise des dll pour le c et c++ qui sont livrées par défaut avec
windows.
|
Depend des options de compilation : il peut utiliser une bibliotheque
statique, donc pas de dépendance de DLL.
| Quote: | 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 si
l'os de destination n'est pas XP
|
idem.
Tu n'es pas forcé de livrer des DLL si tu compiles correctement ton
programme (hop, ca alege le programme entier, car la DLL est grosse...)
| Quote: | 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 ...
|
Il y a encore (et ca ne me choque pas) des personnes qui utilisent les
bibliotheques win32 uniquement, sans bibliotheque standart C ou C++,
donc programme limité au minimum.
(+UPX bien sur...)
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Wed Jul 27, 2005 8:04 am Post subject: Re: Compilation avec MinGW |
|
|
Fabien LE LEZ wrote:
| Quote: | On Mon, 25 Jul 2005 15:03:38 +0200, Arnaud Meurgues
[email]news.arnaud (AT) meurgues (DOT) non.fr.inva[/email]lid>:
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...]
|
En fait, à cet égard, je crois qu'on pourrait considérer
l'interpréteur un peu comme un objet chargé dynamiquement, non.
Il ne se trouve pas dans le fichier exécutable de ton programme,
mais pour que ton programme tourne, il faut qu'il soit présente
quelque part sur le système, et pendant que ton programme
tourne, il est bien en mémoire.
Et en fait, j'imagine que la raison principale derrière ces
différences, c'est que VC++ utilise d'avantage d'objets
dynamiques, où g++ fait de l'édition de liens statiques. (Sous
Linux, avec g++ 3.4.0, helloworld passe de 7 Ko à 4 Mo en
précisant static. Pour dire que ça peut faire une différence.)
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
|
|
| Back to top |
|
 |
Cyrille Guest
|
Posted: Thu Aug 04, 2005 3:53 am Post subject: Re: Compilation avec MinGW |
|
|
condo4 a écrit :
| Quote: |
PROG1 (C):
GCC = 15 663o
GCS = 5 632o
VC7 = 36 864o
PROG2 (C++):
GCC = 474 990o
GCS = 266 240o
VC7 = 73 728o
|
Ces chiffres ne sont pas très parlants si tu ne nous dit pas avec
quelles options tu compiles.
En tout cas pour VC, on peut obtenir des choses beaucoup moins grosses.
Avec VC8 beta, j'obtiens 44 544 octets en liant statiquement la
librairie MFC et 5 632 octets en liant dynamiquement. (oui, je sais
qu'il n'y a rien de MFC dans le programme, je n'ai pas d'explications
moi-même.)
Voir cette page pour quelques trucs: http://www.catch22.net/tuts/minexe.asp
(il y a des techniques un peu extrêmes, mais ça vaut le coup de le lire)
| Quote: | 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....
|
Il utilise des DLL?
--
"Don't quote me on this." ~ Oscar Wilde
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|