Permettez-moi d'expliquer le problème avec un exemple. J'utilise un ancien programme dans mon travail quotidien, comme par exemple xfig et pdfedit .
Maintenant, ces programmes sont assez anciens et ne sont pas mis à jour trop souvent; ma crainte est qu'un jour ou l'autre ils ne fonctionneront plus faute de bibliothèque ou de mise à jour incompatible.
Si le programme est facile à compiler maintenant , sur un système en cours d'exécution, la solution est pratique: essayez de pirater un peu la source et compilez-la statiquement --- l'exécutable résultant sera gros et pas si efficace, mais cela fonctionnera pour le avenir prévisible (1). Cela semble être le cas xfig
et je vais l'essayer dès que possible.
Mais, par exemple, pdfedit
dépend de Qt3, et la mise en place d'un système pour le compiler est assez complexe à l'heure actuelle. Heureusement, il peut être exécuté dès maintenant, grâce au fait que la bibliothèque dont il a besoin n'est en conflit avec rien. Mais cela peut changer à l'avenir, donc je voudrais résoudre ce problème:
Comment puis-je créer un binaire statique (ou quelque chose de similaire) si j'en ai un dynamique et toutes les bibliothèques, mais pas de code source, sur Ubuntu?
J'ai cherché autour. Une possibilité est statifier (2), mais il a beaucoup de problèmes avec la randomisation d'adresse , donc c'est un non-non. La version non libre, Ermine , semble fonctionner, mais je préférerais vraiment une option open source.
Une autre possibilité consiste à utiliser Docker ou un système d'emballage similaire. Mais tous les tutoriels que j'ai trouvés sont assez orientés RedHat ; et, honnêtement, assez complexe à suivre.
Notes de bas de page :
(1) n'est pas si fou. J'utilise un ffmpeg statique par exemple, fonctionne bien et sans aucun problème de compatibilité ...
(2) pour compiler statifier
, voir /programming/23498237/compile-program-for-32bit-on-64bit-linux-os-causes-fatal-error
linux-vdso.so.1
est introuvable, je suppose que c'est dans le noyau, correct?man 7 vdso
: "Le" vDSO "(objet dynamique dynamique partagé) est une petite bibliothèque partagée que le noyau mappe automatiquement dans l'espace d'adressage de toutes les applications de l'espace utilisateur."Une suggestion concernant le statificateur :
Si la randomisation de la disposition de l'espace d'adressage (ASLR) entraîne son échec, vous n'avez pas besoin de la désactiver pour l'ensemble de la machine. Vous pouvez le désactiver uniquement pour ce processus:
Il exécutera cette commande avec la disposition aléatoire désactivée (pas besoin d'être root).
la source
statifier
...xfig_statified
core core dumps ... dommage. Merci quand même.