我是依赖walker的新手,我正在尝试确定我的dll是否包含一个C函数,我试图通过JNI从Java调用。当我在Dependency Walker中选择应该包含C函数的dll时,我得到了导入和导出函数。导入列表具有setLogLevel函数,但入口点未绑定(与此列表中的所有函数一样),并显示带有c的绿色框。导出列表具有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)
答案 0 :(得分:0)
您的C函数名称不正确。该名称必须以Java
为前缀,并包含包和类名。在您的情况下,它应该是Java_com_test_jni_SampleJNI_setLogLevel
。
答案 1 :(得分:0)
我省略了具有jdk的jni.h和jni_md.h头文件的java目录,这些文件来自CFLAGS(编译)包含在Makefile中。一旦我将它们添加到Makefile中,我就可以通过JNI方法调用从java到c进行通信。