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

CaporalDead Messages postés 209 Date d'inscription   Statut Membre Dernière intervention   -  
Mahmah Messages postés 496 Date d'inscription   Statut Membre Dernière intervention   -
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 !
A voir également:

4 réponses

mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
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 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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   Statut Membre Dernière intervention   125
 
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