我正在尝试使用带有加载共享库(*. so文件)的maven依赖项的Graalvm安装QUUKUS服务器。但是,在服务器启动后,我得到了一个java.lang.UnessfiedLinkError。
重现问题的步骤
git克隆https://github.com/ricardocunha/h3-native-test
mvn清洁包-DskipTest
GraalVM和环境:
GraalVM GraalVM 21.3.0
更多细节
当前错误
但是,File. canRead返回true。所以,我不明白发生了什么。
编译命令为:
native-image -J-Djava.util.logging.manager=org.jboss.logmanager.LogManager -J-Dsun.nio.ch.maxUpdateArraySize=100 -J-Dvertx.logger-delegate-factory-class-name=io.quarkus.vertx.core.runtime.VertxLogDelegateFactory -J-Dvertx.disableDnsResolver=true -J-Dio.netty.leakDetection.level=DISABLED -J-Dio.netty.allocator.maxOrder=3 -J-Duser.language=en -J-Duser.country=US -J-Dfile.encoding=UTF-8 -H:-ParseOnce -J--add-exports=java.security.jgss/sun.security.krb5=ALL-UNNAMED -J--add-opens=java.base/java.text=ALL-UNNAMED -H:ResourceConfigurationFiles=resource-config.json -H:+PrintClassInitialization --allow-incomplete-classpath -H:+JNI -Djava.library.path=/tmp -H:JNIConfigurationResources=jniconfig.json -H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy\$BySpaceAndTime -H:+JNI -H:+AllowFoldMethods -J-Djava.awt.headless=true -H:FallbackThreshold=0 -H:+ReportExceptionStackTraces -H:-AddAllCharsets -H:EnableURLProtocols=http -H:NativeLinkerOption=-no-pie -H:-UseServiceLoaderFeature -H:+StackTrace h3-native-test-1.0.0-SNAPSHOT-runner -jar h3-native-test-1.0.0-SNAPSHOT-runner.jar```
因此,在尝试以非本机身份运行后,错误很明显:
java.lang.UnsatisfiedLinkError: /usr/lib/libh3-java.so: /lib64/libm.so.6: version `GLIBC_2.29' not found (required by /usr/lib/libh3-java.so)
以原生身份运行,没有找到有关GLIBC_2.29的信息。这个库是一个非常核心的库,所以我决定从docker image quakus-micro-image: 1.0(GLIBC 2.28)迁移到openjdk:11作为基础映像,因为它是2.31。Ubi-9目前beta。