Question

Je suis en train de compiler un programme en cours d'exécution sur un serveur HP UX sur Red Hat Linux.

Il utilise la bibliothèque Xerces-c pour analyser les fichiers xml. La compilation est ok, mais lorsque je tente de l'exécuter, je reçois le message suivant

  

./ a.out: Erreur lors du chargement partagé   Bibliothèques: libxerces-c.so.28: ne peut pas   ouvrir le fichier objet partagé: Aucun fichier   ou répertoire

J'ai écrit un programme très simple pour essayer de comprendre ce qui se passe:

#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/util/TransService.hpp>
#include <xercesc/parsers/SAXParser.hpp>
#include <xercesc/util/OutOfMemoryException.hpp>



int main(int argc, char* argv[])
{
        return 0;
}

Et compilé comme ceci:

  

g ++ test.cpp   -L./xml/xerces-c_2_8_0/lib -lxerces-c -I./xml/xerces-c_2_8_0/include

Étonnamment, le fichier est en fait là:

lib]$ ls
libxerces-c.a   libxerces-c.so.28    libxerces-depdom.a   libxerces-depdom.so.28
libxerces-c.so  libxerces-c.so.28.0  libxerces-depdom.so  libxerces-depdom.so.28.0

Toutes les pensées? Je sens que je me manque quelque chose, mais je ne sais pas quoi.

Merci d'avance.

Était-ce utile?

La solution

run ldd a.out et voir si l'éditeur de liens peut résoudre le droit .so fichier

LD_LIBRARY_PATH d'exportation pour inclure le dossier en cours (de la même manière que la variable PATH) et vérifier à nouveau ldd

Autres conseils

la bonne façon de faire ce que vous voulez est la suivante:

g++ test.cpp -Xlinker -R ./xml/xerces-c_2_8_0/lib -lxerces-c -I./xml/xerces-c_2_8_0/include

ou

g++ test.cpp -Wl,-rpath ./xml/xerces-c_2_8_0/lib -lxerces-c -I./xml/xerces-c_2_8_0/include

Options Xlinker ou Wl vous permettent d'utiliser des options de liaison spécifiques, vous ne avez pas besoin de modifiy LD_LIBRARY_PATH

Vous devez dire à la bibliothèque d'exécution c où trouver les différents symboles qui ne coûtent pas compilés statiquement dans votre code et ne coûtent pas dans les endroits usualy / lib et / usr / lib.

Vous faites cela en ajoutant le chemin de votre bibliothèque partagée LD_LIBRARY_PATH. Dans ce cas, ce sera ce que vous avez été mise à l'argument -L au compilateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top