java.lang.UnsatisfiedLinkError: нет db_java-4.2 в java.library.path

Я пытаюсь получить доступ к файлу базы данных Berkeley DB (скажем, Test.db) из java-кода, а затем хочу прочитать из него все пары. Для выполнения этой задачи я использую пакеты com.sleepycat.db.* и com.sleepycat.bdb.* ( ПРИМЕЧАНИЕ: не Oracle Berkeley DB JE ). Для реализации я сделал точно так, как описано в этом Учебном руководстве по Java API BerkeleyDB.

Итак, когда я запускаю этот проект из eclipse, я получаю эту ошибку

Exception in thread "main" java.lang.UnsatisfiedLinkError: no db_java-4.2 in java.library.path

и из трассировки стека источник этого исключения произошел из этой строки

env = new DbEnv(0);

Я попытался установить его из команды java

$java -D<name>=<value>

но все же это не сработало.

Моя цель — экспортировать этот проект в файл jar и использовать его для чтения BDB где угодно . Всем, кто знает, как выбраться из этого, я ценю вашу помощь. Было бы здорово, если бы меня можно было перенаправить на любой рабочий учебник для доступа к БД Беркли из кода Java. Спасибо !!


person kK_Pulla    schedule 14.08.2012    source источник


Ответы (2)


РЕШЕНИЕ. После большой работы я обнаружил, что API Sleepycat, над которым я работаю, использует собственные библиотеки, написанные на C/C++ через JNI. В базе данных Berkeley DB, установленной на моем ПК, не было общего объектного файла db_java-4.2 (точнее, имя файла — libdb_java-4.2), что означает, что эта BDB не настроена для java API.

Таким образом, решение состоит в том, чтобы снова начать установку BDB с нуля, включив конфигурацию java.

person kK_Pulla    schedule 17.08.2012
comment
пожалуйста, объясните немного лучше, как решить эту проблему - person Johny19; 19.10.2015
comment
Используйте флаг --enable-java для сборки с поддержкой Java. Это создает поддержку Java как для Berkeley DB, так и для Berkeley DB XML. - person swenedo; 06.12.2015

У меня такая же проблема.

Как упоминалось в kK_Pulla, API sleepycat использует собственные библиотеки, написанные на C/C++ через собственный интерфейс Java. Таким образом, выполнение вызовов API Sleepycat означает, что код Java в конечном итоге будет вызывать скомпилированный код C/C++.

Если вы получаете ошибку java.lang.UnsatisfiedLinkError: no db_java-4.2 in java.library.path, то вполне вероятно, что, по крайней мере, в моем случае, вы не включили соответствующие собственные библиотеки в свой проект.

Я бы описал, что я сделал, чтобы исправить это в моем случае. Во-первых, позвольте мне описать мое окружение.

  1. Java-проект IntelliJ maven на Linux-машине.
  2. Создан Berkeley DB версии 18.1.40.
  3. Сборка Berkeley включала переключатель --enable-java на этапе настройки.
  4. Я включил файл db.jar (находящийся в каталоге build_unix) в качестве зависимости модуля через меню Intellij «Файл» > «Структура проекта». Я выбрал «Модули» в разделе «Настройки проекта» на левой панели, а затем на вкладке «Зависимости» добавил файл db.jar в качестве зависимости.

Это было состояние моего проекта до того, как я столкнулся с ошибкой UnsatisfiedLinkError. Чтобы исправить это, я добавил в проект нативные библиотеки (находящиеся в каталоге unix_build/.libs). Вы можете сделать это, выбрав меню «Файл» > «Структура проекта». На левой панели в настройках проекта выберите «Библиотеки», а затем нажмите знак «+» на правой панели, чтобы добавить каталог для собственных библиотек.

Это решило мою проблему.

person swarmcode    schedule 09.02.2021