Compatibilité binaire de distribution Linux
Un moyen de créer un binaire dans une distribution Linux et de l'exécuter sur une autre distribution avec la même architecture? Ou je devrais compiler et construire sur différentes distributions?
Existe-t-il une compatibilité entre Redhat, distributions basées sur Debian pour les fichiers binaires? (Je veux utiliser mon fichier binaire Ubuntu sur fedora!)
9 réponses
Entrez Linux Standard Base {[2] } pour réduire les différences entre les distributions Linux individuelles. Voir
Lier statiquement vos binaires les rend moins portables car certaines bibliothèques ne fonctionneront pas correctement pour cette machine (méthodes d'authentification différentes, etc.).
Si vous liez statiquement des bibliothèques "inhabituelles" et gardez votre ensemble de distributions prises en charge au minimum, vous devriez être ok.
Ne pas lier statiquement la bibliothèque C (ou le binaire entier), c'est une recette pour des problèmes :)
Regardez ce que (par exemple) Google fait avec Chrome.
Dans quelle langue votre application est-elle codée? Si c'est dans un langage comme Python (et pas de liaisons C) ou Java ou tout autre langage basé sur une machine virtuelle, alors je pense que vous pouvez faire confiance à la machine virtuelle pour vous assurer que votre application fonctionnera sur les différentes distributions Linux.
En outre, il y a la Base Standard Linux à laquelle vous pouvez vous référer.
HTH, Amit
Je me rends compte que c'est une question très ancienne, mais elle est élevée dans les résultats de recherche et cela n'a pas été mentionné:
CDE est un outil pour créer des applications Linux portables . Cet outil regroupe tous les fichiers nécessaires (y compris les bibliothèques) en analysant au moment de l'exécution. Je l'ai utilisé avec succès sur les outils de ligne de commande plusieurs fois, un exemple étant de faire fonctionner tcpdump sur une ancienne appliance matérielle exécutant une distribution personnalisée. CDE ne nécessite pas non plus de source, c'est juste des paquets un fichier exécutable que vous êtes en mesure d'exécuter.
À un moment donné, j'ai eu une erreur en exécutant la commande cde
qui a été corrigée en ajoutant la commande à LD_ASSUME_KERNEL=2.4.1
, cela pourrait ne pas être nécessaire dans les versions récentes car il y a des années.
Le Code est également sur GitHub: https://github.com/pgbovine/CDE
Ça marche. Mais cela dépend aussi de la version des bibliothèques partagées que vous utilisez, y compris libc, libstdc++ qui sont forcés par la version du compilateur qui peut différer d'une distribution à une autre.
La meilleure façon est de distribuer le code source et de le rendre facile à construire la source sur une distribution Linux raisonnable. C'est mieux que la distribution binaire car il ne suffit pas de rendre le binaire compatible avec les bibliothèques partagées. Vous devez également vous assurer d'adapter votre programme à des éléments tels que les emplacements et les conventions de distribution spécifiés pour l'endroit où vont les applications web, ou comment le courrier électronique est envoyé, ou comment les services sont démarrés, ou comment déterminer le format de papier par défaut, ou une myriade de d'autres détails.
Voir par exemple le Debian Policy Manual pour un document décrivant un grand nombre de choses qu'une distribution doit décider pour assurer la compatibilité entre les applications qui s'exécutent sur elle. Vous n'avez pas besoin de lire ou d'apprendre par cœur, mais il montre l'étendue des problèmes qui peuvent voyage vous.
Vous devriez probablement travailler avec plusieurs des principales distributions pour vous assurer que votre application fonctionne bien avec toutes. La plupart des développeurs de distributions vous aidera volontiers si vous les approchez poliment. Si vous êtes chanceux, vous pouvez attirer des Volontaires des distributions pour faire l'emballage binaire pour vous, et cela vous donnera rapidement des commentaires sur ce que vous devez changer au niveau de la source pour rendre votre application facile à emballer.
La base standard Linux déjà mentionnée par d'autres tente de trouver une solution de distribution croisée à ces variables, mais elle n'est pas complète et n'est pas entièrement prise en charge par la plupart des distributions. Cependant, la plupart des distributions considèrent que c'est un problème si elles cassent accidentellement la compatibilité LSB.
Normalement, il est acceptable d'utiliser des binaires sur les distributions linux tant que vous avez le même ensemble de bibliothèques disponibles. Vous pouvez utiliser 'ldd' pour vérifier quelles bibliothèques sont nécessaires par un binaire. libc devrait avoir la même version dans les distributions impliquées.
Vous pouvez lier statiquement vos exécutables pour la portabilité.
LSB vaut vraiment le détour. Bien qu'en ce qui concerne le travail avec les bibliothèques j'ai été le plus satisfait par cette réponse ici à SO https://stackoverflow.com/questions/1209674/shipping-closed-source-application-for-linux/1242738#1242738 et ce traitement détaillé du mécanisme rpath http://www.eyrie.org/~eagle/notes/rpath.html