Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Liaison statique ou dynamique

21 réponses
Avatar
Lucas Levrel
Bonjour,

Je cross-poste sans FU2 car je ne sais pas quel est le groupe le plus
adapté, et la réponse peut même varier selon l'OS, alors je vous laisse
voir...

J'écris un programme en C++ avec une interface en GTK+ (mais mes questions
sont plus générales). Sous Windows, GTK+ est livré avec des .def, .lib,
.dll.a, et .dll (chaque bibli a un ou plusieurs fichiers avec ces
extensions). Sous Linux j'ai des .so et .la pour certaines biblis,
seulement des .so pour d'autres.

Je compile avec GCC (dans MinGW sous Windows). Je voudrais obtenir un
exécutable qui se suffise à lui-même, c'est-à-dire utilisable sans
installer GTK+ au préalable (donc distribuable sans redistribuer GTK+ à
côté). Je croyais l'obtenir en passant l'option -static à GCC, d'ailleurs
le fichier produit est beaucoup plus gros avec cette option que sans. Mais
patatras : sous Win, si je tente de lancer l'exécutable « statique » sur
une machine n'ayant pas GTK+, j'obtiens une erreur « ne trouve pas
libmachin.dll » ; sous Linux, n'ayant pas de machine sans GTK+ à dispo, je
n'ai pas pu tester (y a-t-il moyen de « cacher » les biblis installées le
temps d'un test ?).

Mes questions sont donc :
- peut-on produire un exécutable qui se suffise à lui-même, et avec
quelles options de compilation ?
- si oui, quels sont les ingrédients nécessaires en termes de
bibliothèques (quel format de fichier) ?
- à défaut, peut-on « dégraisser » des bibliothèques dynamiques pour n'en
garder que les fonctions réellement utilisées par l'application ? (L'idée
étant d'alléger au maximum le paquet exécutable+biblis à distribuer.)

Merci pour votre aide et vos explications.

--
LL

1 réponse

1 2 3
Avatar
Lucas Levrel
Bonjour,

Merci à tous de m'avoir tant instruit.

Pour mon problème particulier, j'ai trouvé
http://mingw-cross-env.nongnu.org/ qui répond parfaitement à mon besoin et
même plus (plus besoin de booter Win pour compiler). Ce "package" compile
en statique tout un tas de bibliothèques, dont GTK.

L'équipe de GTK ne distribue pas de version statique. Ils le déconseillent
même dans le cas général (à cause de l'i18n apparemment).

--
LL
1 2 3