Bonjour à tous;
est-il possible "d'inclure" les dlls dans l'exécutable ? avec un .rc ?
je suis sous windows et j'utilise codeblocks.
Merci d'avance
Bonjour à tous;
est-il possible "d'inclure" les dlls dans l'exécutable ? avec un .rc ?
je suis sous windows et j'utilise codeblocks.
Merci d'avance
Oui et non
Oui : dans ce cas, ta bibliothèque .dll devient 1 ressource comme 1 autre et tu devras **l'installer** pour l'utiliser.
En regardant vite fait on peut charger 1 ressource pour récupérer 1 "assembly" mais pas 1 .dll. Donc sûrement qu'en C++ pur (pas C++ managed) c'est impossible.
Non : dans ce cas, ta bibliothèque .dll est 1 vraie bibliothèque.
Pour la question .rc, il me semble que c'est pour coder 1 bibliothèque partagée (<- en gros c'est 1 bibliothèque dynamique dont le code de chargement/ déchargement/ appel/ ... est généré).
Une dll dans l'exécutable en ressource …
Autant faire une édition des liens statique, ça évite d'avoir à installer les DLL ou de les fournir avec.
Il faut commencer par comprendre comment ça fonctionne de passer d'un code source à un exécutable.
Tu as un code source qui sera compilé en un fichier objet. La phase de compilation n'est que ça. Il faut évidemment fournir à la commande de compilation des paramètres qui vont indiquer où trouver les headers, comment optimiser, etc.
Une fois cela fait, la phase suivante est l'édition des liens. Cela consiste à lier ton fichier objet et les bibliothèques (ce qui signifie que le linker va indiquer dans quelle bibliothèque on peut trouver telle ou telle fonction que tu utilises → par exemple strcmp dans libc, cos dans libm, etc. Alors soit tu lies avec une bibliothèque dynamique (une DLL) et l'exécutable va contenir suffisamment d'infos pour que l'OS puisse charger la DLL et y accéder quand ton programme fait appel à une des fonctions de cette DLL ou tu fais une édition statique ce qui signifie que le linker va intégrer dans ton exécutable le code auquel tu fais appel.
Donc, un moment donné, comme tu veux développer une solution logicielle, il va falloir essayer d'utiliser google (ou tout autre moteur de recherche) afin d'apprendre effectivement ce qu'est une édition de liens, comment on fait un link statique … puis ensuite comment dire à CB pour le faire.
Un forum n'est pas un endroit pour expliquer en détail puis pas à pas la démarche car en l'occurrence c'est long à faire. En revanche, on peut tout à fait t'orienter vers ce que tu dois rechercher. Ensuite si tu n'as pas compris un point particulier alors nous pourrons t'aider plus en avant.
Maintenant, tout à fait entre nous, le fait que tu rechigne à vouloir utiliser une plateforme un peu moins désuète que GTK2 ne nous donnes pas forcément envie de pousser nos explications très loin ; les voyages dans le temps à plus de 10 ans en arrière ne sont pas ma tasse de thé.
Pour reprendre @WhiteCrow et te donner 1 indication de ce qu'il faut faire
Est-ce que les DLLs t'appartiennent (tu as le code source) ?
Oui : tu as 2 choix
- Mettre le code source dans celui de ton exécutable (en supprimant évidemment tout le code de chargement/ déchargement/ appel/ ...)
- Changer la cible de "bibliothèque dynamique" en "bibliothèque statique" (en gros le fichier résultat sera 1 ficher .lib/ .a au lieu de .dll/ .so)
Non : ce sont des bibliothèques système.
Il faut regarder dans les options pour lier avec les "bibliothèques système statiques" (1 truc du style Project -> Properties -> Build Target -> Type -> Static library)
Après il faut faire attention : certaines **sociétés** ne fournissent pas les versions statiques. Exemple : cygwin
Et pour finir, tu as aussi les entêtes précompilées et les modules en C++20 ... qui sont différents mais peut-être que cela peut correspondre à tes besoins.
Arrivé là je fais quoi ? (pour ce projet, la DLL que j'aimerais liée est SDL2.dll)
![]()
Partager