Используйте средство проверки зависимостей для проверки функции C в DLL - PullRequest
0 голосов
/ 05 января 2012

Я новичок в обходчике зависимостей и пытаюсь определить, содержит ли моя dll функцию C, которую я пытаюсь вызвать из Java через JNI.Когда я выбираю DLL, которая должна содержать функцию C в Dependency Walker, я получаю функции импорта и экспорта.В списке импорта есть функция setLogLevel, но точка входа не привязана (как и для всех функций в этом списке) и отображается в зеленом поле с символом c.Список экспорта as имеет функцию setLogLevel и имеет точку входа 0x00003C25.Когда я пытаюсь вызвать setLogLevel из JAVA / JNI, я получаю следующее.Я не уверен, что импорт / экспорт правильно, кто-нибудь может подтвердить?

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.test.jni.SampleJNI.setLogLevel(I)V
            at com.test.jni.SampleJNI.setLogLevel(Native Method)
            at com.test.jni.Sample.setLogLevel(Unknown Source)
            at com.test.jni.Example.setLogLevel(Unknown Source)
            at com.test.jni.Example.main(Unknown Source) 

Ответы [ 2 ]

0 голосов
/ 05 января 2012

Я опустил java-каталоги, в которых есть заголовочные файлы jdk jni.h и jni_md.h из CFLAGS (compile), включенные в Makefile.Как только я добавил их в Makefile, я смог общаться из java в c с помощью вызовов методов JNI.

0 голосов
/ 05 января 2012

Ваша функция C названа неправильно.Имя должно иметь префикс Java и содержать имя пакета и класса.В вашем случае это должно быть Java_com_test_jni_SampleJNI_setLogLevel.

...