J'ai compilé une bibliothèque partagée sur mon bureau Ubuntu 9.10. Je souhaite envoyer la bibliothèque partagée à un co-développeur disposant d'une boîte Red Hat Enterprise 5. Peut-il utiliser ma bibliothèque partagée sur sa machine?Puis-je utiliser une bibliothèque partagée compilée sur Ubuntu sur une machine Linux Redhat?
Répondre
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 .donc vers le système de démarrage (dans son propre répertoire /usr/local/*
ou /opt/*
, par exemple) puis essayez d'exécuter l'exécutable prévu à l'aide un paramètres d'environnement LD_PRELOAD. Si l'éditeur de liens (ld-linux.so
) parvient à résoudre tous les symboles entre les deux alors le programme devrait charger et exécuter. Il devrait donc être possible, et raisonnablement sûr (tant que vous n'écrasez pas l'une des bibliothèques système existantes et n'utilisez que LD_ * /etc/ld.so.preload
(dans un chroot?) Magic pour lier les exécutables cibles à cette
Cependant, je pense que c'est une mauvaise idée.Vous avez un problème de gestion de paquets.Ubuntu et Red Hat ont tous deux des outils de gestion de paquetages utiles (Notez que l'endroit approprié pour poser des questions sur la gestion des paquets serait ServerFault ou SuperUser, certainement pas SO)
Merci, je vais lire sur LD_PRELOAD etc. et voir si je fais des progrès. Considérer la construction d'un packagepour qu'il l'installe aussi –
Je me joins à Xinus. Compilateur IMHO, dans le cas d'Ubuntu et RHEL, ce sera gcc, est étroitement couplé avec glibc. Donc, si sur les deux machines, c'est la même chose que la plupart du temps, ça marche.
Mais pourquoi deviner, faire un petit essai routier (principal avec deux lignes) et si elle est en cours d'exécution que il y a une bonne chance qu'un programme plus grand peut fonctionner sur un environnement « hostile » :)
La meilleure solution est de donner votre code à votre co développeur, et compilons-le !!!!
Vous avez plusieurs solutions
- Mise à niveau de son gcc à la même version que votre
- Installer sa version gcc sur votre ordinateur et le compiler
Vous devez vérifier si vous travaillez à la fois 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 .
Peu probable: vous n'auriez pas posé cette question si cela a juste fonctionné, voulez-vous?
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 avec 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 est non vide, la bibliothèque ne fonctionnera pas sur RHEL-5.
Vous pouvez créer une bibliothèque compatible avec RHEL-5 en utilisant autopackage.
A beaucoup aimé la sortie de readelf (similaire à dumpbin sur la plate-forme Windows). Incidemment, l'exécution de la commande ci-dessus ne correspond à aucune des "chaînes offensantes", donc en théorie, cela devrait fonctionner. Je considérerai toutefois utiliser un gestionnaire de paquets, comme vous et un autre utilisateur l'avez suggéré. –
- 1. Bibliothèque partagée Linux qui utilise une bibliothèque partagée non définie
- 2. bibliothèque partagée sous Ubuntu
- 3. Tableau de proxies sur une machine linux
- 4. Php 5 sur RedHat Enterprise Linux 5
- 5. oprofile sur Linux s'exécutant sur une machine virtuelle
- 6. Reliez une bibliothèque partagée à une version différente de libc
- 7. Créer un programme d'installation Windows (XP) sur une machine Linux?
- 8. comment lier la bibliothèque partagée par rapport à une autre bibliothèque partagée sous Linux?
- 9. Accéder à Mongrel sur Ubuntu dans une machine virtuelle Windows
- 10. Lien une bibliothèque partagée statique à ma bibliothèque partagée
- 11. créer une bibliothèque partagée en utilisant une autre bibliothèque dans linux
- 12. Linux redhat kernel-headers
- 13. Compiler une bibliothèque partagée statiquement
- 14. Machine ASP.NET 32 bits compilée en cours d'exécution sur une machine 64 bits
- 15. installez svn client sur redhat RHEL5
- 16. Utiliser Boost sur Ubuntu
- 17. Comment activer mod_rewrtie sur ubuntu sur machine bitnami sur Amazon?
- 18. Comment configurer firefox sur une ligne de commande sur une machine Linux
- 19. Git sur machine Ubuntu avec Windows Client
- 20. Comment configurer Zend Framework sur une machine Linux?
- 21. Installation pour Mac et Linux sur une machine Windows
- 22. Migration de logiciels déployés sur une machine virtuelle Linux?
- 23. Comment utiliser une bibliothèque partagée (dans ce cas, JsonCpp) dans mon programme C++ sous Linux?
- 24. une application compilée .net 3.5 peut-elle être exécutée sur une machine avec seulement .net 2.0?
- 25. comment faire une bibliothèque partagée à partir d'une bibliothèque statique sous ubuntu en utilisant gcc
- 26. Création de Mercurial 1.3.1 sur Ubuntu Linux
- 27. Comment puis-je exécuter une application OpenGL installée sur une machine Linux à partir de ma machine Windows?
- 28. manquant MySQL PHPinfo sur Ubuntu Linux
- 29. rsync sur Ubuntu - permissions root sur la machine distante?
- 30. Vue initiale sur une application basée sur une vue partagée
Je pense que vous devriez être si le compilateur est la même – Xinus