Mac + JNI + Java - PullRequest
       22

Mac + JNI + Java

5 голосов
/ 17 февраля 2012

Немного предыстории: У меня есть Java-приложение, которое должно общаться со сторонним оборудованием на Mac. Они дали мне SDK, но это не на Java. Поэтому я пытаюсь создать jnilib, который будет служить мостом между моим Java-приложением и SDK.

Вопрос: Я сделал небольшой пример jnilib, который говорит с SDK, но когда я пытаюсь использовать его в своей java-программе, я получаю следующую ошибку

Exception in thread "main" java.lang.UnsatisfiedLinkError: /Users/john.doe/Desktop/eclipse/workspace/Lesson13_Jni_Smart7/bin/libSmartTest7.jnilib:  Library not loaded: build/Release/SMARTResponseSDK.framework/Versions/A/SMARTResponseSDK  Referenced from: /Users/john.doe/Desktop/eclipse/workspace/Lesson13_Jni_Smart7/bin/libSmartTest7.jnilib      
Reason: image not found
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1827)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1742)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1045)
    at com.learning.lesson13.JniSmart7.<clinit>(JniSmart7.java:6)

По ошибке похоже, что мой libSmartTest7.jnilib ищет библиотеку SMARTResponseSDK.

Что я пробовал Я знаю, где находится библиотека SMARTResponseSDK на моем Mac. Я попытался скопировать его в мою рабочую папку в Eclipse, но все равно получаю ошибку. Я пытался использовать -DJava.library.path, но все равно получаю ошибку.

Любые идеи о том, каким будет наилучший из возможных подходов.

1 Ответ

0 голосов
/ 01 сентября 2017

Как только вы внутри JNI кода, больше не имеет значения, на что указывает java.library.path.

Как только вы внутри JNI кода, все, что вы можете сделатьчтобы убедиться, что библиотека видна вашему коду через LD_LIBRARY_PATH / DYLD_LIBRARY_PATH, или вы можете динамически загрузить файл библиотеки из любого места, которое вам нравится.

Итак, для вас, я предлагаю взглянутьздесь:

Youтакже могут использовать флаги компиляции при сборке библиотеки JNI и использовать rpath .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...