«Невозможно загрузить библиотеку: собственная поддержка JNA не найдена в пути к ресурсу» при попытке загрузить библиотеку JNA в Mac OS X

1

У меня есть заглушка библиотеки JNA следующим образом:

public interface FREngine extends Library {
    NativeLibrary JNA_NATIVE_LIB = NativeLibrary.getInstance("FREngine");
    FREngine INSTANCE = (FREngine) Native.loadLibrary("FREngine", FREngine.class);
}

Если я попытаюсь использовать эту библиотеку в любом случае, я получаю действительно запутанную ошибку:

java.lang.UnsatisfiedLinkError: Unable to load library 'FREngine': 
    JNA native support (darwin/libFREngine.jnilib) not found in resource path 
    (...entire classpath here...)

Почему это меня сбивает с толку:

  • .jnilib - расширение файла для библиотек JNI. Поскольку я использую JNA, я бы не ожидал, что JNA будет использовать любую библиотеку JNI, отличную от своей, "jnidispatch".
  • JNA ищет путь к классу для этого файла, но в аду это не так, потому что это просто какая-то случайная библиотека, которую я пытаюсь импортировать. DYLD_FRAMEWORK_PATH это не должно выглядеть DYLD_FRAMEWORK_PATH?
  • Другие родные библиотеки, которые инициализируются точно так же, работают нормально. Например, CoreFoundation может быть разрешен. Его код для загрузки библиотеки тот же, что и другое имя библиотеки.

Я попытался взглянуть на рамки самих себя и вижу только незначительные отличия:

  • FREngine.framework находится в /Library, CoreFoundation.framework находится в /System/Library
  • FREngine.framework/Versions содержит каталог с более длинным и сложным именем, чем CoreFoundation.framework, который имеет только одну версию под названием A
  • FREngine.framework/Versions/[ver] содержит Headers и Libraries

Используемая версия JNA - 3.5.2. Мы не можем обновить до 4.x, потому что есть еще одна ошибка, которая вызывает исключение, как только мы попытаемся загрузить нашу родную библиотеку.

  • 0
    Похоже, ваша JNA немного устарела; эта ошибка немного вводит в заблуждение (когда речь идет о вашей библиотеке), говоря «собственная поддержка JNA». Какие версии JVM / JNA вы используете?
  • 0
    Я проверю это на следующей неделе (сейчас в праздничный день ...) Но я знаю, что мы немного устарели, потому что, когда я отправился исследовать в отладчике, я обнаружил, что мы используем версию несколько старше, чем источник у меня есть.
Теги:
macos
frameworks
native
jna

1 ответ

0

Причина, по которой библиотека FREngine не работает в этом случае в неправильном методе загрузки двигателя. Ожидается, что FREngine будет загружен через com.abbyy.FREngine только.

  • 0
    Который в то время я расследовал, избегая использования, потому что он делал все виды странных вещей ... В любом случае, я подозреваю, что эта проблема была причиной вводящего в заблуждение сообщения об ошибке от JNA, как предложено в комментарии выше.
  • 0
    У меня есть две рекомендации. 1) Официальный. Перейти в «Поддержка». 2) Актуальные. Перейти на C ++.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню