0

我是依赖 walker 的新手,我正在尝试确定我的 dll 是否包含我试图通过 JNI 从 Java 调用的 C 函数。当我在 Dependency Walker 中选择应该包含 C 函数的 dll 时,我得到了导入和导出函数。导入列表具有 setLogLevel 函数,但入口点未绑定(与此列表中的所有函数一样)并显示为带有 c 的绿色框。导出列表 as 具有 setLogLevel 函数,并以 0x00003C25 作为入口点。当我尝试从 JAVA/JNI 调用 setLogLevel 时,我得到以下信息。我不确定导入/导出是否正确,有人可以确认吗?

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) 
4

2 回答 2

0

您的 C 函数命名不正确。该名称必须带有前缀Java并包含包和类名。在你的情况下,它应该是Java_com_test_jni_SampleJNI_setLogLevel.

于 2012-01-04T23:45:26.643 回答
0

我从 Makefile 中的 CFLAGS(编译)中省略了包含 jdk 的 jni.h 和 jni_md.h 头文件的 java 目录。一旦我将它们添加到 Makefile 中,我就能够通过 JNI 方法调用从 java 到 c 进行通信。

于 2012-01-05T05:46:03.160 回答