Pregunta

Estoy intentando compilar un programa que se ejecuta en un servidor HP UX en un sombrero rojo Linux.

Utiliza la biblioteca xerces-c para analizar archivos XML. Compilación está bien, pero cuando intento ejecutarlo, me sale el siguiente mensaje

  

./ a.out: error durante la carga compartida   bibliotecas: libxerces-c.so.28: no puede   abrir el archivo objeto compartido: No existe el fichero   o directorio

Me escribió un programa muy simple para tratar de entender lo que está pasando en:

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

Y compilado de esta manera:

  

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

Sorprendentemente el archivo es en realidad existe:

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

¿Alguna idea? Siento que estoy perdiendo algo, pero no sé qué.

Gracias de antemano.

¿Fue útil?

Solución

ejecutar ldd a.out y ver si el enlazador puede resolver el derecho de presentar .so

LD_LIBRARY_PATH exportación para incluir la carpeta actual (de la misma manera como la variable PATH) y compruebe de nuevo LDD

Otros consejos

la buena manera de hacer lo que quiere es la siguiente:

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

Xlinker o Wl opciones le permiten utilizar opciones de enlaces específicos, que no es necesario modifiy LD_LIBRARY_PATH

Es necesario contar la biblioteca de tiempo de ejecución C dónde encontrar los distintos símbolos que enviaban compilado estáticamente en el código y enviaban en el usualy / lib y / usr / lib ubicaciones.

Esto se hace mediante la adición de la ruta de la biblioteca compartida a LD_LIBRARY_PATH. En este caso, esto será lo que has estado posponiendo para el argumento -L para el compilador.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top