2016-12-07 11 views
0

Я загружаю C++ JNI DLL в свой проект Java. Он работает спокойно на JDK 1.6, но есть пробник JDK 1.8. Есть ли какие-либо изменения в загрузке C++ JNI DLL в Java 1.8?Когда в Java загружается jni dll, JDK 1.8 UnsatisfiedLinkError

Приведенные ниже ошибки и результат.

JDK 1.8 Консоль:

Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\ws-pidion\PidionSDK\oojnidotnet.dll: Can't find dependent libraries 
at java.lang.ClassLoader$NativeLibrary.load(Native Method) 
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941) 
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857) 
at java.lang.Runtime.loadLibrary0(Runtime.java:870) 
at java.lang.System.loadLibrary(System.java:1122) 
at JavaCallNative.<clinit>(JavaCallNative.java:14) 

коды:

File readReturnNativeStringVaueFile; 

static { 
    System.loadLibrary("oojnidotnet"); 
} 

protected void finalize() throws Throwable { 
    super.finalize(); 
} 

public native boolean connect(String paramString); 

Одинаковые коды работают с JDK 1.6.

Спасибо.

+0

Сообщение об ошибке указывает, что ваша DLL зависит от других DLL-файлов, из которых не удалось найти. Вы знаете, какие зависимости у вашей библиотеки DLL? См. Также ["Как проверить зависимость DLL?"] (Http://stackoverflow.com/q/7378959/2711488) – Holger

+0

Да, я знаю зависимости другой DLL. И тот же каталог с моим проектом. Мой проект работает в JDK 1.6. Чем отличается JDK 1.6 и JDK 1.8? Безопасность для пути? –

+0

Итак, DLL не использует JNI или системные DLL? Трудно поверить, что * все * необходимые библиотеки находятся в одном каталоге. Таким образом, все еще возможно, что существует абсолютный путь или ссылка на библиотеку, которая не существует unter Java 8. Вы должны * проверить *, а не полагать. – Holger

ответ

0

Я решил эту проблему с помощью user2543253s.

Для JDK 1.8:

  • Need 2 DLL Lib (C: \ Program Files (x86) \ Java \ jdk1.6.0_45 \ JRE \ Bin \ plugin2) (2 DLL ЛИЭС скопировать проект путь.)

    System.loadLibrary("msvcr71"); 
    System.loadLibrary("npjp2"); 
    
    System.loadLibrary("oojnidotnet"); 
    

Он работает таким образом, в 1,8 раза.

Спасибо.