Хобрук: Ваш путь к мастерству в программировании

Получение java.lang.UnsatisfiedLinkError во время выполнения

Я пытаюсь использовать JNI для доступа к методам С++ из класса Java. Я могу скомпилировать (как в Eclipse, так и в командной строке) свой класс Java в порядке, но при выполнении класса во время выполнения я получаю:

Исключение в потоке «основной» java.lang.UnsatisfiedLinkError: com.domain.services.CallServiceAPIS.createSession()I в com.domain.services.CallServiceAPIS.createSession(собственный метод) в com.domain.services.CallServiceAPIS.main(CallServiceAPIS .java:18)

Java-код выглядит следующим образом:

package com.domain.services;

public class CallServiceAPIS {

    static {
        System.loadLibrary("service.client");
    }

    public native int createSession();

    public static void main(String[] args) {
        System.out.println(System.getProperty("java.library.path"));
        new CallServiceAPIS().createSession();
    }
}

Я включил распечатку java.library.path только для того, чтобы убедиться, что она указывает на правильное расположение библиотеки C++ - и это так. Я также попытался установить LD_LIBRARY_PATH в своей среде Eclipse. Но ни то, ни другое не сработало.

Обратите внимание, что вызов System.loadLibrary работает, поскольку 1) код компилируется и 2) ошибка возникает в строке 18, которая является новым вызовом CallServiceAPI.

Код С++:

 int createSession(const PosServiceInfo info, const SessionArgs& args, Domain::UUID& uuidSession)
    {
        return int::undefined;
    }

Есть идеи?


  • Покажите исходный код C++, где определено createSession. 22.06.2016
  • @gudok добавил исходный код C++ 22.06.2016
  • return int::undefined; -- Это не C++. 22.06.2016

Ответы:


1

Не бери в голову. Я понял, что неправильно использую интерфейс JNI. Я думал, что вы можете загрузить СУЩЕСТВУЮЩУЮ библиотеку C++, используя СУЩЕСТВУЮЩИЙ источник C++. Но вам в основном придется переписать существующий код, чтобы использовать интерфейс JNI.

21.06.2016
  • Возможно, будет проще использовать jna вместо raw jni (за счет потери производительности). 22.06.2016
  • @gudok Спасибо, попробую. 22.06.2016
  • Новые материалы

    Как симулировать серию пенальти на Python с помощью симуляции Монте-Карло, часть 1: генерация функций
    Серия пенальти была огромным испытанием во время чемпионата мира по футболу. Они вызвали много споров в социальных сетях и новостных агентствах. Даже финальный матч турнира решался по..

    AST для разработчиков JavaScript
    TL; DR Эта статья - мое выступление на недавно состоявшейся конференции Stockholm ReactJS Meetup. Вы можете посмотреть слайды здесь..

    5 проектов на Python, которые нужно создать прямо сейчас!
    Добро пожаловать! Python — один из моих любимых языков программирования. Если вы новичок в этом языке, перейдите по ссылке ниже, чтобы узнать о нем больше:

    Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
    DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

    «Очень простой» эволюционный подход к обучению с подкреплением
    В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..