Bonjour,
Voici une question simple à laquelle je n'ai pas encore trouvé de réponse satisfaisante :
Comment savoir si un binaire construit sur une machine donnée s'exécutera sur une autre de même architecture ?
En gros, si je compile sur Fedora 15, est-ce que je pourrai exécuter sur Fedora 14 ou 16, ou même Ubuntu 10.04 ?
Par expérience, je n'ai pas souvent vu d'incompatibilité descendante, mais j'aimerais en savoir plus.
Merci d'avance.
# Librairies?
Posté par weeber (site web personnel) . Évalué à 3.
C'est plutôt au niveau des librairies qui risquent de manquer, ou d'avoir des version incompatibles (fonctionnalités manquantes) ou ca risque de coincer…
[^] # Re: Librairies?
Posté par purplepsycho . Évalué à 3.
La partie bibliothèques ne pose pas trop de problème, imagions un hello world ou équivalent.
Le cas particulier que j'ai en tête n'utilise que la bibliothèque du C et n'est supporté que pour Red Hat 5 (de tête), mais fonctionne −a priori− sans problème sur fedora, ubuntu…
[^] # Re: Librairies?
Posté par NeoX . Évalué à 5.
deux choses à verifier :
- 32 ou 64bits
- les dependances à des bibliotheques
une fois que tu as verifié ca, ca va rouler tout seul.
[^] # Re: Librairies?
Posté par purplepsycho . Évalué à 2.
Et comment ça se passe coté noyau ?
[^] # Re: Librairies?
Posté par NeoX . Évalué à 4. Dernière modification le 17 avril 2012 à 00:13.
bah 32 ou 64bits doit deja te permettre de savoir.
sauf si tu comptes vraiment faire des programmes bas niveaux en assembleur ou utilisant des instructions non-generiques (AVX/AVX2 qui ne sont pas encore dans tous les processeurs)
[^] # Re: Librairies?
Posté par purplepsycho . Évalué à 1.
Bon, bah ok, merci.
Je pensais que la version du noyau avait une grosse influence…
merci encore.
[^] # Re: Librairies?
Posté par reno . Évalué à 4.
Et bien ça dépend de ce que tu fais: bien sûr si tu utilise une fonctionnalité récente (genre cgroup) et qu'ensuite tu essaye d'utiliser un kernel plus vieux, ça peut ne pas marcher, sinon les devs du kernel (mais ce sont bien les seuls, dommage..) prennent très au sérieux la compatibilité ascendante.
[^] # Re: Librairies?
Posté par NeoX . Évalué à 2. Dernière modification le 17 avril 2012 à 11:02.
comme tu le dis, il fut un temps ou le noyau prenait des binaires au format a.out
depuis il est passé au format ELF et a progressivement abandonné le format a.out
mais comme le dise les autres et moi meme un peu plus haut, ca depend de ce que tu veux faire.
c'est sur que si tu veux faire un pilote pour ton peripherique maison, il faudra surement se poser la question du noyau pour lequel tu veux que ton pilote fonctionne.
mais si tu veux juste faire un programme utilisateur ton seul probleme ce sera les bibliotheques que tu vas utiliser et leur fonctionnalité.
et ce sont ces bibliotheques plus que le noyau dont tu devras te mefier.
[^] # Re: Librairies?
Posté par purplepsycho . Évalué à 1.
Mon interrogation venait de là justement :
j'ai lu dans linux device drivers 3 qu'un pilote −ou un module noyau en général− ne pouvait être construit que pour une version donnée. Et ne comprenais pas comment mes softs pouvaient fonctionner d'une distrib' à l'autre.
[^] # Re: Librairies?
Posté par NeoX . Évalué à 2.
peut-etre simplement parce que tes "softs" ne sont pas des modules noyaux
ils communiquent avec le noyau pour aller lire/ecrire des données sur un port serie, un port reseau, un socket
mais comme les devs noyaux font ca bien, c'est ce qu'on appelle les API, c'est un standard qui ne doit pas changer à chaque version du noyau, justement pour ne pas casser le fonctionnement.
[^] # Re: Librairies?
Posté par claudex . Évalué à 7.
En fait, il y a deux interfaces pour le noyau, une interne pour que les différents modules du noyau communiquent entre eux et une externe pour que les programmes communiquent avec le noyau. L'interface interne change régulièrement sans aucune compatibilité assurée, l'interface externe assure la compatibilité pendant très longtemps.
« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
[^] # ldd
Posté par B16F4RV4RD1N . Évalué à 3.
un élément de réponse peut être donné avec la commande ldd qui liste le détail des bibliothèques liées (avec leur version) :
par exemple, avec un programme simple en ligne de commande :
Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it
[^] # Re: Librairies?
Posté par devnewton 🍺 (site web personnel) . Évalué à 2.
Pour chaque bibliothèque dynamique, il faut vérifier que tu la retrouves dans une version compatible binaire, cad avec les mêmes signatures de fonctions, les mêmes tailles de structures, compilée avec le même compilateur avec les mêmes options de compilation sur toutes les distributions…
Sauf cas particulier, c'est mission impossible et il vaut mieux tout lier en statique.
Ou utiliser un langage interprété :-)
Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.
[^] # Re: Librairies?
Posté par calandoa . Évalué à 6.
Attention! Gcc peut linker des bibliothèques internes que tu n'as pas spécifié. Dans tous les cas, si tu veux augmenter la portabiité, compile en statique.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.