我使用JNAerator生成了接口代码。 JAVA接口是从c头文件生成的。结果不一致。有时JVM崩溃,有时库未加载。但是,代码在调用本机函数时始终返回异常。当我在我的本机代码中添加一些调试备注时,我没有得到任何输出。看起来JNA代码根本不会调用本机方法
package org.libjpegturbo.turbojpeg;
import java.net.URL;
import java.util.Enumeration;
import com.sun.jna.Native;
import org.libjpegturbo.turbojpeg.JPEGLib;
import org.libjpegturbo.turbojpeg.JPEGLib.jpeg_decompress_struct;
import org.libjpegturbo.turbojpeg.JPEGLib.jpeg_error_mgr;
public class JPEG {
static JPEGLib lib = null;
static jpeg_decompress_struct cinfo = null;
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
System.setProperty("jna.library.path", "C:/image_test/mozjpeg-master/.libs");
lib = JPEGLib.INSTANCE;
System.out.println(lib.DCTSIZE2);
jpeg_error_mgr err = new jpeg_error_mgr();
System.out.println(1);
cinfo = new jpeg_decompress_struct();
System.out.println(2);
cinfo.err = lib.jpeg_std_error(err);
System.out.println(3);
lib.jpeg_destroy_decompress(cinfo);
System.out.println(4);
lib.jpeg_CreateDecompress(cinfo, JPEGLib.JPEG_LIB_VERSION, null);
lib.jpeg_create_decompress(cinfo);
System.out.println(5);
System.out.println(err.trace_level);
System.out.println(2);
System.gc();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
e.printStackTrace();
}catch(Throwable e){
System.out.println("2");
System.out.println(e);
e.printStackTrace();
}
}
public void finalize() {
System.out.println("A garbage collected");
}
}
当我运行程序后,生成错误桩跟踪
java.lang.Error: Invalid memory access
at com.sun.jna.Native.invokeVoid(Native Method)
at com.sun.jna.Function.invoke(Function.java:408)
at com.sun.jna.Function.invoke(Function.java:354)
at com.sun.jna.Library$Handler.invoke(Library.java:244)
at com.sun.proxy.$Proxy0.jpeg_destroy_decompress(Unknown Source)
at org.libjpegturbo.turbojpeg.JPEG.main(JPEG.java:32)
当我在调用c库函数时传递简单类型时没有问题。但是,当我使用JNerator生成的类调用库函数时,库函数会返回错误