Parametres de compilation VC2008 pour exe petit et fonctionnant sur tout PC
Galmiza
Messages postés573Date d'inscriptionsamedi 16 novembre 2002StatutMembreDernière intervention 9 avril 2008
-
7 avril 2008 à 05:06
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
9 avril 2008 à 10:57
Salut,
J'ai un programme con comme tout qui se compile parfaitement mais dont la taille me gene.
Quand j'etais sous Visual 2006, l'exe faisait 6.5ko.
Maintenant, avec Visual 2008, il peut varier de 6.5ko a 216ko (selon les options de compilation) mais ne fonctionne sur les autres ordinateurs que lorsqu'il est tres 'gros'...
Passer de la configuration 'multi-threaded' a 'multi-threaded dll' reduit considerablement la taille de l'exe mais l'empeche de fonctionner sur d'autres ordinateurs ("Veuillez reinstaller l'application" est affiche juste apres le lancement du programme).
Quelle configuration du compilateur me permettrait d'avoir a la fois un exe petit et fonctionnant sur tous les pc?
Merci
Voici ci-dessous le code.
Si vous avez un peu de temps, pouvez-vous le compiler et me donner les tailles des exe et la compatibilite sur des machines sans environnement de developpement?
Encore merci.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 7 avril 2008 à 05:54
Si ton exe est si gros, c'est parce que le compilo "inline" les fonctions du CRT directement dans ton programme.
À l'inverse, laisser ces fonctions en dehors du programme demande donc de les trimbaler avec une DLL (msvcr90.dll sous vc++ 2008). C'est pour ça que ton programme ne peut s'exécuter correctement sur d'autres configurations.
La solution est de se passer complètement du CRT.
Le problème est que ton code suggère que tu utilises la console:
int main(void)
...
printf(...);
Malheureusement, je ne connais aucun moyen de s'abstraire du CRT en utilisant la console.
Il faut créer un projet windows (GUI) et créer soit même le point d'entré du programme pour être sûr que le compilo n'ajoute pas de truc inutile:
Il faut aussi désactiver tous les contrôles inutiles des buffers, des "optimisations à fibre" et, bien entendue, désactiver toutes options de débuggages. Tout ceci est configurable via les options du compilo et du linker.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 7 avril 2008 à 06:23
"Il faut aussi désactiver tous les contrôles inutiles des buffers, des
"optimisations à fibre" et, bien entendue, désactiver toutes options de
débuggages."
En gros ça veut dire: Compile en release mais en autant que ta configuration soit bonne.
Galmiza
Messages postés573Date d'inscriptionsamedi 16 novembre 2002StatutMembreDernière intervention 9 avril 20081 8 avril 2008 à 05:11
Salut,
Merci, j'ai cree des projets win en utilisant la methode proposee par SAKingdom, mais toujours le meme probleme.
La desactivation des CLR fonctionne, mais la selection de runtime "Multi-Thread" est obligatoire sinon le programme ne fonctionne pas sur le PC de Mr tout le monde.
runtime "Multi-Thread DLL" -> 3.00ko
runtime "Multi-Thread" -> 45.00ko
...oups, j'utilisais printf... je reteste ce soir avec WriteConsole comme le suggere juju12.
Quelles autres fonctions standards sont a proscrire pour eviter de faire gonfler l'exe?
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 8 avril 2008 à 21:49
Tu perds ton temps avec WriteConsole et compagnie. Si tu veux rester en console, garde le CRT (ainsi que le poid de l'exe).
Les fonctions du CRT à proscrire sont toutes les fonctions qui demandes un ou des appels à l'API win32 (getc, fopen, printf, scanf, malloc, free etc. etc. etc). Certaines, même sans appel à l'API, comme memset et memcpy (si la taille du buffer est variable) ainsi que les fonctions mathématiques, demande absolument le CRT.
strcpy, strcat, strlen (les petites fonctions très simple) et compagnie sont les seules dont je peux t'assurer que le CRT au grand complet ne sera pas inliné.
Le meilleur truc, je dirais, est quand tu peux te passer d'une fonction du CRT, fais le.
Galmiza
Messages postés573Date d'inscriptionsamedi 16 novembre 2002StatutMembreDernière intervention 9 avril 20081 9 avril 2008 à 04:42
Salut,
En fait je souhaite utiliser des fonctions type selection de fichiers/dossier via interface windows (ex en premier post), compression d'images/video... dans des scripts PHP.
Il me faut donc faire des fonctions windows qui prennent des arguments et qui renvoient des valeurs que je puisse recupere dans mon script PHP.
Je souhaite egalement que les exe aient les tailles les plus petites.
Exemple d'utilisation d'une fonction windows somme dans un script PHP:
<?php
$a=5;
$b=109;
echo "La somme de $a et $b vaut: ".exec("sum $a $b");
?>
Le script est cense renvoyer:
La somme de 5 et 109 vaut: 114
Je ne tiens donc pas specialement a garder la console.
Cependant, je ne recupere plus rien en sortie du programme lorsque j'essaie de me passer de la console.
Voila vous savez tout :D.
S'il est impossible de faire de petit exe avec vc2008, tant pis je repasserais au 2005 ou au 6.