Вопрос

Я пытаюсь скомпилировать программу, работающую на сервере HP UX в Red Hat Linux.

Он использует библиотеку xerces-c для анализа XML-файлов.Компиляция в порядке, но когда я пытаюсь ее запустить, я получаю следующее сообщение

./а.выход:Ошибка при загрузке общих библиотек:libxerces-c.so.28:не может открыть файл общего объекта:Данный файл или каталог отсутствует

Я написал очень простую программу, чтобы попытаться понять, что происходит:

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

И скомпилировал это так:

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

Удивительно, но файл действительно существует:

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

Есть идеи ?Я чувствую, что что-то упускаю, но не знаю, что.

Заранее спасибо.

Это было полезно?

Решение

бегать ldd a.out и посмотрите, сможет ли компоновщик разрешить правильный файл .so.

экспорт LD_LIBRARY_PATH чтобы включить текущую папку (так же, как переменная PATH) и снова проверьте ldd

Другие советы

Хороший способ сделать то, что вы хотите, это следующий:

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

или

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

Параметры Xlinker или WL позволяют использовать конкретные параметры связывания, вам не нужно модифицировать LD_Library_path

Вам нужно указать библиотеке среды выполнения C, где найти различные символы, которые не компилируются статически в вашем коде и не находятся в обычных расположениях /lib и /usr/lib.

Это можно сделать, добавив путь к вашей общей библиотеке в LD_LIBRARY_PATH.В данном случае это будет то, что вы указали в качестве аргумента -L компилятору.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top