我正在使用多种不同的 Java 功能测试 graalVM 本机图像限制。我编写了一个小程序来执行精巧的边缘检测,并使用 javax.ImageIO 类加载图像。代码可以很好地编译为本机映像,但是在将代码作为本机映像运行时出现以下运行时错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.sun.imageio.plugins.jpeg.JPEGImageReader.initJPEGImageReader()J [symbol: Java_com_sun_imageio_plugins_jpeg_JPEGImageReader_initJPEGImageReader or Java_com_sun_imageio_plugins_jpeg_JPEGImageReader_initJPEGImageReader__]
at com.oracle.svm.jni.access.JNINativeLinkage.getOrFindEntryPoint(JNINativeLinkage.java:145)
at com.oracle.svm.jni.JNIGeneratedMethodSupport.nativeCallAddress(JNIGeneratedMethodSupport.java:57)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.initJPEGImageReader(JPEGImageReader.java)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.<init>(JPEGImageReader.java:232)
at com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi.createReaderInstance(JPEGImageReaderSpi.java:85)
at javax.imageio.spi.ImageReaderSpi.createReaderInstance(ImageReaderSpi.java:320)
at javax.imageio.ImageIO$ImageReaderIterator.next(ImageIO.java:532)
at javax.imageio.ImageIO$ImageReaderIterator.next(ImageIO.java:516)
at javax.imageio.ImageIO.read(ImageIO.java:1463)
at javax.imageio.ImageIO.read(ImageIO.java:1315)
at Main.main(Main.java:32)
这是由以下代码行引起的:
File file = new File(args[0]);
BufferedImage image = ImageIO.read(file);
我试图在我的 jni-config.json 文件中指定 JpegImageReader:
[
{
"name" : "com.sun.imageio.plugins.jpeg.JPEGImageReader",
"allDeclaredConstructors" : true,
"allPublicConstructors" : true,
"allDeclaredMethods" : true,
"allPublicMethods" : true
}
]
但是我仍然得到与以前相同的错误。有谁知道 graalvm 本机映像是否可以支持 ImageIO,如果它不支持为什么不呢?