xerces-c 2.8:errore durante il caricamento delle librerie condivise
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.
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.