Puis-je utiliser une bibliothèque partagée compilée sur Ubuntu sur une machine Linux Redhat?

J’ai compilé une bibliothèque partagée sur mon bureau Ubuntu 9.10. Je souhaite envoyer la librairie partagée à un co-développeur disposant d’une boîte Red Hat Enterprise 5.

Peut-il utiliser ma lib partagée sur sa machine?

Premier point: toutes les réponses concernant la version du compilateur semblent erronées. Ce qui est important, ce sont les liens (et l’architecture, bien sûr).

Si vous copiez le fichier .so sur le système de démarrage (dans son propre /usr/local/* ou /opt/* , par exemple), essayez d’exécuter l’exécutable voulu en utilisant les parameters de l’environnement LD_PRELOAD. Si l’éditeur de liens ( ld-linux.so ) parvient à résoudre tous les symboles entre les deux, le programme doit être chargé et exécuté.

Donc, cela devrait être possible et raisonnablement sûr (à condition de ne pas écraser les bibliothèques système existantes et d’utiliser simplement la magie LD_ * /etc/ld.so.preload (dans un chroot?) Pour lier la cible des exécutables vers cette bibliothèque.

Cependant, je pense que c’est une mauvaise idée. Vous avez un problème de gestion de paquets. Ubuntu et Red Hat disposent tous deux d’outils de gestion de paquets performants. Utilise les! (Notez que le bon endroit pour poser des questions sur la gestion des paquets serait ServerFault ou SuperUser, certainement pas SO).

Peu probable: vous n’auriez pas posé cette question si cela a fonctionné, n’est-ce pas?

Selon DistroWatch , Ubuntu 9.10 utilise glibc-2.10.1 , tandis que RHEL-5.4 utilise glibc-2.5 . Cela signifie que si votre bibliothèque référence des symboles avec les versions GLIBC_2.6 et supérieures, cela ne fonctionnera pas sur RHEL-5.

Vous pouvez dire si vous utilisez de tels symboles (et lesquels) avec:

 readelf -s /path/to/your/library.so | egrep 'GLIBC_2.([6-9]|10)' 

Si la sortie n’est pas vide, la bibliothèque ne fonctionnera pas sur RHEL-5.

Vous pouvez peut-être créer une bibliothèque compatible avec RHEL-5 à l’aide de l’ autopackage .

Je me joins à Xinus. IMHO comstackr, dans le cas de Ubuntu et RHEL, ce sera gcc, est étroitement couplé avec glibc. Donc, si sur les deux machines, c’est la même chose que probablement.

Mais pourquoi deviner, faire un petit essai (principal avec quelques lignes) et s’il est en cours d’exécution, il y a de bonnes chances qu’un plus gros programme puisse s’exécuter dans un environnement “hostile” 🙂

La meilleure solution est de donner votre code à votre co-développeur et de le comstackr !!!!

Vous avez plusieurs solutions

  • Mettre à jour son gcc vers la même version que votre
  • Installer sa version gcc sur votre ordinateur et la comstackr

Vous devez vérifier si vous travaillez tous deux sur la même architecture 32 bits ou 64 bits.

Mon avis est que vous pouvez avoir des problèmes, car vous n’utilisez probablement pas la même glibc.