[C++] Réunir tout en 1 seul exe

Fermé
CaporalDead Messages postés 209 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 mars 2011 - 1 avril 2008 à 17:53
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 2 avril 2008 à 15:02
Bonjour à tous !

Voilà, j'ai créer un petit programme en C++ avec la lib SDL et SDL_image et je voudrais savoir si c'est possible de créer un seul éxécutable qui contient toutes les DLL et les Images etc... et qu'on ai plus qu'à cliquer dessus et tout se lance ?
Merci !

4 réponses

mamiemando Messages postés 32283 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 mars 2023 7 572
2 avril 2008 à 00:42
Hum je pense que ça doit dépendre de s'il s'agit de librairies statiques (.a) ou dynamiques (.so). Dans le premier cas ça me paraît possible mais pas dans le second. Vu que sous windows tout s'appelle .dll je ne sais pas trop... Mais à mon avis c'est mieux de gardé un exécutable et ses librairies.

Bonne chance
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 522
2 avril 2008 à 00:59
Les dll c'est pas juste l'équivalent des .so ?
Comme un .so sous linux, je ne pense pas qu'on puisse fondre une dll dans un executable comme s'il s'agissait d'une librairie statique...
0
mamiemando Messages postés 32283 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 mars 2023 7 572
2 avril 2008 à 01:12
Aucune idée moi windows tu sais... Mais ouais c'est peut être comme un .so. Le nom le laisse penser en tout cas.
0
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 328
2 avril 2008 à 10:06
salut.
Pareil que les autre : peu de certitude.
Sous Linux, l'option -static ajouter à l'édition des liens permet de s'affranchir en grande partie de certain .so, ce qui permet une certaine portabilité des codes (d'un linux à l'autre).
à tester sous Windows.
0
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125
2 avril 2008 à 15:02
Salutations,

Sous MS Windows les .dll sont les bibliothèques dynamiques et les .lib les statiques qui contiennent soit le code minimum pour compiler un programme qui utilisera une dll, soit une bibliothèque complète.

Le plus simple pour inclure une dll dans un exécutable est de l'importer en tant que ressource de l'exécutable. (Comme les icônes etc) Il faudra alors la ressortir en début d'exécution et la charger dynamiquement.

La fonction Win32 GetTempFileName permet d'obtenir un nom de fichier dans le répertoire temporaire de Windows (%WINDIR%\temp\) afin de 'dumper' sa dll dedans. Je ne suis pas sûr que l'on puisse compter sur un programme pour charger automatiquement la dll étant donné que le nom de fichier temporaire aura l'extension "tmp".

Solutions autres:
- Tenter de "démonter" la dll et voir si il est possible de linker les modules obtenus. J'avais croisé des outils pour le démontage mais je ne sais plus leurs noms. (Cela avait un rapport avec la transformation d'une dll pour la rendre compatible avec Dev-cpp qui prend des fichiers lib*.a re-windowsés)

- Tenter de former l'exécutable normal, d'inclure la dll en tant que ressource (ou en bloc dans le segment de code ?) et modifier la table des fonctions. Il faudra aussi soit neutraliser le chargement de la dll, soit ne pas la linker la dll et simplement rajouter les entrées dans la table des fonctions. Ce sera peut-être alors plus simple d'avoir prévu un jeu de pointeurs. Pour ne pas avoir à modifier tout le code mais juste les pointeurs. Enfin à tester...

M.
0