Libjawt so невозможно открыть разделяемый объектный файл нет такого файла или каталога

Обновлено: 07.07.2024

Я пытаюсь выполнить pg_dump на сервере PostgreSQL 9.0.4, запущенном на Debian, и я получаю ошибку ниже:

libpq.so.5 является ссылкой на libpq.so.5.3 , как показано ниже

Что я делаю неправильно?

ОТВЕТЫ

Ответ 1

1: Знайте путь libpq.so.5

Пример вывода: /usr/pgsql-9.4/lib/libpq.so.5 Если ничего не найдено, проверьте, были ли вы уже установлены подходящие postgresql-lib для вашей версии postgresql и вашей платформы ОС

2: Символическая ссылка на библиотеку в "хорошо известном" пути библиотеки, например /usr/lib :

Внимание: Если ваша платформа 64 бит, вы ДОЛЖНЫ также символически ссылаться на путь 64-битных библиотек:

3: Будьте счастливы!

Ответ 2

В каком каталоге находятся эти файлы libpq ? Вы можете попробовать установить переменную окружения LD_LIBRARY_PATH , чтобы указать на этот каталог или убедиться, что он находится в стандартном месте.

Кроме того, почему ссылка libpq.so.5 не показана в разделе "как показано ниже"? Возможно, вам нужно просто запустить ldconfig ?

Ответ 3

В конце концов следующие символические ссылки запустили

Эти пути предназначены для RHEL, используйте find / -name libpq.so для размещения вашей установки и добавления ее в те же папки назначения /usr/lib/ и /usr/lib64/ , используя оригинальное имя файла.

Основная причина показывает, что установка не помещала этот файл в общую папку.

Ответ 4

Эта ошибка, вероятно, возникает из-за того, что переменная окружения $LD_LIBRARY_PATH не установлена.

Когда вы устанавливаете свое приложение из исходного кода с использованием префикса ( ./configure --prefix=/some/path ), вы должны сообщить, где находится ваш путь lib/ . Я только что нашел решение для этого и добавил эту переменную в сценарий init bash пользователя postgres:

Ответ 5

У меня была точно такая же проблема с установкой pg 9.6. Я исправил это так. Скорее раздражает, что установщик не учитывает это.

Программа является частью набора тестов Xenomai, кросс-скомпилированного из Linux PC в Linux+Xenomai ARM toolchain.

Edit: хорошо, я не заметил, что .1 в конце был частью имени файла. И вообще, что это значит?

Я только что установил Passenger 3.0.11 и nginx и получил эту ошибку: Запуск nginx: / opt/nginx/sbin/nginx: ошибка при загрузке общих библиотек: libpcre.so.0: не удается открыть общий объектный файл: нет такого файла или каталога

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

Для этого нам нужно будет сделать эти простые шаги:

(1 ) Найдите, где находится библиотека, Если вы ее не знаете.

(2) Проверьте наличие переменной окружения dynamic library path ( LD_LIBRARY_PATH )

если ничего не отображается, добавьте значение пути по умолчанию (или нет, если хотите)

(3) мы добавляем путь желания, экспортируем его и пробуем приложение.

Обратите внимание, что путь должен быть каталогом, в котором находится path.so.something . Так что если path.so.something находится в /my_library/path.so.something , то это должно быть :

Вот несколько решений, которые вы можете попробовать:

ldconfig

Как указал AbiusX: Если вы только что установили библиотеку, вам может просто понадобиться запустить ldconfig .

ldconfig создает необходимые ссылки и кэш для самых последних общих библиотек, найденных в каталогах, указанных в командной строке, в файле /etc / ld.so.conf и в доверенных каталогах (/lib и /usr/lib).

Обычно ваш менеджер пакетов позаботится об этом при установке новой библиотеки, но не всегда, и вам не повредит запустить ldconfig, даже если это не ваша проблема.

Dev пакет или неправильная версия

Если это не сработает, я также проверю предложение пола и поищу версию библиотеки "-dev". Многие библиотеки разделены на пакеты dev и non-dev. Вы можете использовать эту команду, чтобы найти его:

Это также может помочь, если у вас просто установлена неправильная версия библиотеки. Некоторые библиотеки публикуются одновременно в разных версиях, например, Python.

Расположение библиотеки

Если вы уверены, что установлен правильный пакет, а ldconfig его не нашел, то он может просто находиться в нестандартном каталоге. По умолчанию команду ldconfig выглядит в /lib , /usr/lib , /etc/ld.so.conf и каталогов, перечисленных в и $LD_LIBRARY_PATH . Если ваша библиотека находится где-то в другом месте, вы можете либо добавить каталог в свою собственную строку в /etc/ld.so.conf , добавить путь к библиотеке в $LD_LIBRARY_PATH , либо переместить библиотеку в /usr/lib . Затем запустите ldconfig .

Чтобы узнать, где находится библиотека, попробуйте сделать это:

(Замените libraryname именем вашей библиотеки)

Если вы идете по маршруту $LD_LIBRARY_PATH , вы захотите поместить его в свой файл

/.bashrc , чтобы он запускался каждый раз, когда вы входите в систему:

Ну, это не ложь - в этом списке нет libpthread_rt.so.1 . Вероятно, вам придется заново настроить и перестроить его так, чтобы он зависел от имеющейся у вас библиотеки, или установить все, что предоставляет libpthread_rt.so.1 .

В вашем случае вам может сойти с рук символическая ссылка libpthread_rt.so.1 на libpthread_rt.so . Однако нет никаких гарантий, что он не сломает ваш код и не съест ваши обеды TV.

У меня есть программа C, скомпилированная с GCC с использованием Cygwin, которую я хочу запустить из программы python в windows 7. Я дошел до того, что использовал модуль подпроцесса, но получал error while loading shared libraries. и никакой другой информации. Поиск в Google привел к следующим.

1) Клонировал официальный инструментарий из малины pi github . Установите переменную окружения arm-linux-gnueabihf-c++ (в .bashrc ).

2) Набрал эту команду для генерации двоичного кода для архитектуры ARM:

3) Теперь двоичный код успешно сгенерирован. Я попытался запустить двоичный код с помощью команд ниже, но ему не повезло.

Я даже установил переменную окружения в файл .bashrc , но не повезло.

Он дает следующие ошибки соответственно:

Я уверен, что файл libfoo.so находится на правильном пути, но он не может его найти. Вот структура каталогов:

2 ответа

Если вы на самом деле используете LD_LIBRARY_PATH , вы должны проверить, что вы построили test против libfoo.so , а не что-то еще. Выполнить

и проверьте имя библиотеки, которую ожидает ваша программа. Скорее всего, это соответствует его SONAME, который вы можете найти с помощью

SONAME обычно немного отличается, например. libfoo.so.0 , и переименование (или символическая привязка) вашей библиотеки к этому имени поможет.

Изменить

Так как приведенное выше, похоже, не помогает, вот еще одна вещь, которую я хотел бы попробовать. Добавьте полный путь, содержащий libfoo.so в /etc/ld.so.conf , Затем запустите

Проверьте вывод для строк, относящихся к libfoo.so , возможно, будет что-то полезное.

В качестве альтернативы попробуйте скопировать libfoo.so в одно из стандартных мест размещения библиотек, например /usr/local/lib , и снова запустите sudo ldconfig -v .

Используется ли libfoo как библиотека библиотеки ARM (или) x86. Вы можете проверить и подтвердить это с помощью служебной программы файла

Приведенная выше команда должна предоставить архитектуру как ARM, если вы видите ее как i386 (или) i686, тогда библиотека скомпилирована для архитектуры x86, которая не может использоваться на Pi. Сначала вам нужно скомпилировать библиотеку, используя одну и ту же самую cross toolchain, а затем использовать ее для ссылки на тестовое приложение.

Читайте также: