Compilé un programme C++ soulève “impossible d'ouvrir le fichier objet partagé” sur un autre système si le fichier est présent
J'ai écrit un petit programme qui nécessite un certain nombre de bibliothèques, y compris libboost_filesystem, libboost_program_options et libcurl.
J'ai compilé sur mon ordinateur à la maison et a pris le binaire à mon ordinateur au travail pour le tester. Mais là, il donne le message d'erreur suivant lorsque j'essaie de démarrer le programme:
error while loading shared libraries:
libboost_filesystem.so.1.42.0: cannot
open shared object file
Mais quand je fais une recherche de ce fichier, je vois qu'il existe dans:
/usr/lib/libboost_filesystem..1.42.0
Ai-je quelque chose de mal lors de la compilation et de raccordement de mon programme? Si oui, que dois-je faire pour le faire fonctionner sur d'autres machines?
Je trouve souvent que
À partir de ce que vous avez dit, il semble que ça devrait fonctionner. Il y a peut être un bit 32 vs 64 bits conflit. Essayez d'exécuter
wow, vous avez raison. le programme est compilé en 32 bits et la bibliothèque actuelle est 64bit
eh bien, le mélange application 32 bits et 64 bits du système d'exploitation ne fonctionne pas bien 🙂
ldd
pouvez m'aider à trouver ce qui ne va pas. Ce n' ldd ./your_executable
dire?À partir de ce que vous avez dit, il semble que ça devrait fonctionner. Il y a peut être un bit 32 vs 64 bits conflit. Essayez d'exécuter
file ./your_executable
et file /usr/lib/libboost_filesystem.so.1.42.0
pour vérifier que les architectures match 🙂wow, vous avez raison. le programme est compilé en 32 bits et la bibliothèque actuelle est 64bit
eh bien, le mélange application 32 bits et 64 bits du système d'exploitation ne fonctionne pas bien 🙂
OriginalL'auteur tyrondis | 2010-11-02
Vous devez vous connecter pour publier un commentaire.
D'abord, essayez de problème
ldconfig -p | grep libboost_filesystem.so
dans une console, assurez-vous que la bibliothèque est à votre ld cache.Si elle n'est pas, vous devrez peut-être ajouter un fichier avec un nom comme coup de pouce.conf à votre /etc/ld..conf.d répertoire. Ce fichier doit contenir un chemin d'accès à votre bibliothèques boost. Ensuite, exécutez
sudo ldconfig
à la mise à jour de votre système ld cache.Espère que cela vous aidera...
OriginalL'auteur ezpresso
Ressemble vous avez besoin de lien statique de la bibliothèque. Voici une bonne explication. Stimuler la liaison statique
OriginalL'auteur prasanna
Avez-vous un lien avec la même version de la boost_filesystem bibliothèque? Selon la façon dont vous compilez votre application, il exige la même version de la librairie à présent.
Vous pouvez essayer de vérifier ce que votre application semble effectivement pour avec:
Probablement vérifier votre variable d'environnement LD_LIBRARY_PATH.
OriginalL'auteur Dominik Fretz
Pourriez-vous assurez-vous que
/usr/lib/libboost_filesystem.so.1.42.0
n'est pas un lien mort ?OriginalL'auteur Antoine Pelisse
Avez-vous compilez le partagé binaires de boost, et leur a fourni à l'utilisateur?
Souvent boost peut être utilisé sans aucun binaire/partagée à fournir. Mais si vous utilisez, par exemple, boost::filesystem, vous devrez construire les binaires, comme lib ou un objet partagé, et assurez-vous qu'il est à la disposition de l'exécutable final partagé chemin de recherche binaire.
Vous pouvez trouver une explication et plus de détails dans l'élan de la documentation. Ici est la version de linux : http://www.boost.org/doc/libs/1_44_0/more/getting_started/unix-variants.html
À partir de cette page :
...
Je vais ajouter un lien plus précis de la documentation à ce sujet. Fait.
OriginalL'auteur Klaim
est /usr/lib dans votre variable d'environnement LD_LIBRARY_PATH?
OriginalL'auteur frankc