Domanda

Sto cercando di compilare un programma in esecuzione su un server HP UX su Red Hat Linux.

Utilizza la libreria xerces-c per analizzare i file xml.La compilazione è ok, ma quando provo ad eseguirla, ricevo il seguente messaggio

./a.out:Errore durante il caricamento di Shared biblioteche:libxerces-c.so.28:non può Apri il file dell'oggetto condiviso:Nessun file di questo tipo o directory

Ho scritto un programma molto semplice per cercare di capire cosa sta succedendo:

#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;
}

E compilato in questo modo:

g ++ test.cpp -l./xml/xerces-c_2_8_0/lib -lxerces-c -i./xml/xerces-c_2_8_0/include

Sorprendentemente il file è effettivamente 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

Qualche idea ?Sento che mi manca qualcosa, ma non so cosa.

Grazie in anticipo.

È stato utile?

Soluzione

ldd a.out corsa e vedere se il linker in grado di risolvere il diritto .so file

esportazione LD_LIBRARY_PATH per includere la cartella corrente (nello stesso modo in cui la variabile PATH) e verificare LDD di nuovo

Altri suggerimenti

il buon modo per fare quello che vuoi è il seguente:

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

O

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

Le opzioni Xlinker o Wl consentono di utilizzare opzioni di collegamento specifiche, non è necessario modificare LD_LIBRARY_PATH

È necessario dire la libreria di runtime C dove trovare i vari simboli che arent compilati staticamente nel codice e arent nel lib quando arrivavano / e / usr / lib posizioni.

A questo scopo, aggiungendo il percorso della libreria condivisa a LD_LIBRARY_PATH. In questo caso, questo sarà quello che state mettendo per l'argomento -L al compilatore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top