Accueil > Forum > > > > Parametres de compilation VC2008 pour exe petit et fonctionnant sur tout PC
Parametres de compilation VC2008 pour exe petit et fonctionnant sur tout PC
lundi 7 avril 2008 à 05:06:13 |
Parametres de compilation VC2008 pour exe petit et fonctionnant sur tout PC

Galmiza
|
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.
Guillaume
#pragma comment(lib, "shell32.lib") #include <shlobj.h> #include <iostream> // Get folder name int SelectDir( char* szFolderName ) { BROWSEINFO bi; ITEMIDLIST *il; char buffer[MAX_PATH]; bi.hwndOwner = NULL; bi.pidlRoot = NULL; bi.pszDisplayName = buffer; bi.lpszTitle = "Select a folder"; bi.ulFlags = 0; bi.lpfn = NULL; if( (il = SHBrowseForFolder(&bi)) == NULL ) return 0; return SHGetPathFromIDList(il, szFolderName); } char *toSlash(char* s) { char *p=s; while (*p) { if (*p=='\\') *p='/'; p++;} p--; if (*p=='/') *p=0; return s; } int main(void) { // Select local path char path[MAX_PATH]; if (SelectDir(path)==TRUE) printf(toSlash(path)); return 0; }
|
|
lundi 7 avril 2008 à 05:54:08 |
Re : Parametres de compilation VC2008 pour exe petit et fonctionnant sur tout PC

SAKingdom
|
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: #pragma comment(linker, "/entry:myWinMain") void myWinMain (void) { ... ExitProcess(0); } 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. C++ (@++)
|
|
lundi 7 avril 2008 à 06:23:22 |
Re : Parametres de compilation VC2008 pour exe petit et fonctionnant sur tout PC

SAKingdom
|
"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. Tu peux utiliser ceci pour générer un template d'un projet déjà bien configuré (que tu pourras modifier à ton aise bien sûr). http://www.cppfrance.com/codes/TEMPLATES-CPLUSPLUS-VS-2008_44835.aspx C++ (@++)
|
|
lundi 7 avril 2008 à 10:05:36 |
Re : Parametres de compilation VC2008 pour exe petit et fonctionnant sur tout PC

BruNews
|
Si: il = SHBrowseForFolder(..) réussit, il faut libérer la mémoire: CoTaskMemFree(il);
ciao... BruNews, MVP VC++
|
|
lundi 7 avril 2008 à 17:19:39 |
Re : Parametres de compilation VC2008 pour exe petit et fonctionnant sur tout PC

juju12
|
Et pour te passer de printf et compagnie suffit d'utiliser les fonctions console de kernel32 : AllocConsole, WriteConsole etc...
|
|
lundi 7 avril 2008 à 17:24:52 |
Re : Parametres de compilation VC2008 pour exe petit et fonctionnant sur tout PC

SAKingdom
|
Bof bof tant qu'à faire, aussi bien passer direct en GUI. Serait beaucoup plus lucratif en tout cas. C++ (@++)
|
|
mardi 8 avril 2008 à 05:11:15 |
Re : Parametres de compilation VC2008 pour exe petit et fonctionnant sur tout PC

Galmiza
|
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?
Merci BruNews pour la correction.
Merci ;)
|
|
mardi 8 avril 2008 à 21:49:23 |
Re : Parametres de compilation VC2008 pour exe petit et fonctionnant sur tout PC

SAKingdom
|
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. C++ (@++)
|
|
mardi 8 avril 2008 à 22:12:55 |
Re : Parametres de compilation VC2008 pour exe petit et fonctionnant sur tout PC

BruNews
|
Faire de la console, quelle idée auusi. Je comprends pour tester une fonction mais pas un prog à distribuer, c'est révolu.
ciao... BruNews, MVP VC++
|
|
mercredi 9 avril 2008 à 04:42:02 |
Re : Parametres de compilation VC2008 pour exe petit et fonctionnant sur tout PC

Galmiza
|
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. Merki, Guillaume
|
|
Cette discussion est classée dans : exe, bi, path, char, if
Répondre à ce message
Sujets en rapport avec ce message
pb de nom de volume [ par shinevilkyo ]
voici un bout de mon code j utile la fonc getvolumeinfo mais j ai un pb et je ne trouve po de koi il s agit merci d aider un debutant a rogrammer sous
Path de l'EXE [Qt / Linux] [ par garslouche ]
Salut à tous!Je fais une appli avec Qt sous Linux et je voudaris savoir comment faire pour récupérer le path de l'EXEj'ai pensé à argv[0] mais si on a
pb malloc [ par youpiyoyo ]
d'apres msdn char *string; /* Allocate space for a path name */ string = malloc( _MAX_PATH );deja ca chez moi ca compil pas me compilo me di impos
Un truc basique -> Liée 2 variables [ par wizard512 ]
Bonjours,J'ai un petit probleme qui commence a m'aggacé :je n'arrive pas a placé 2 variables dans une variable,je m'explique :EXEMPLE :-------------
probleme avec Liste Files [ par anonyme_man_in_this_world ]
salut ! !je voudrais ecrire une fonction essayant de lister les fichiers et les sous-dossiers d'un dossier mais ça ne marche pas toujours ,voila le co
Trouver le path de notre fichier exe [ par aztcaLISS ]
Salut,Je voudrais savoir s'il y a un fonction qui permet de connaître le path de mon fichier exe quand je lance l'application.merciazt
Probleme avec HeapAlloc() [ par lektrosonic ]
Bonjour,char** split_data(char* cache,int bounds<span style="color: rg
FindWindow et SendMessage [ par gbourgeois0019 ]
SalutJ'ai un premier programme qui a ceci comme code au tout debut du WinMain :HWND hWnd = FindWindow(0,"MonProgramme"); if ( hWnd != NULL ) {
lire un fichier ligne par ligne [ par jOlcoWboY ]
Bien le bonjour, je me suis fait un 'tit bou de code afin de lire un fichier texte ligne par ligne. Je voulais juste savoir si il avait des améliorati
[mfc c++] evenement entre une dll et un exe [ par wogkiller ]
Bonjour,j'ai un programme qui charge dynamiquement des dll, et qui communiquent avec elles en appelant des méthodes dans le sens exe->dll, et qui norm
Livres en rapport
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|