oracle / graal

GraalVM compiles Java applications into native executables that start instantly, scale fast, and use fewer compute resources 🚀
https://www.graalvm.org
Other
20.32k stars 1.63k forks source link

[native-image] Can not support openssl? #2028

Open ShannonDing opened 4 years ago

ShannonDing commented 4 years ago

Problem statement:

Compilation works fine on JDK8(not openJDK) with GraalVM 19.3.0 EE for linux for my projects, but report runtime error below on start. java.lang.UnsatisfiedLinkError: failed to load the required native library

Reproduction: Os: centos7.2 docker JDK: Oracle JDK8 GraalVM: graalvm-ee-java8-linux-amd64-19.3.0.tar.gz native-image: native-image-installable-svm-svmee-java8-linux-amd64-19.3.0.jar netty: 4.0.42.Final

build parameters

native-image --shared -H:Path=./build \ --no-server \ --verbose \ -H:ReflectionConfigurationFiles=./tools/graal/reflection_config.json \ -H:Name=client_core \ -H:CLibraryPath=./src/main/c/native \ -jar ./target/client.jar \ -Dio.netty.noUnsafe=true \ --report-unsupported-elements-at-runtime \ --allow-incomplete-classpath \ -H:+ReportExceptionStackTraces \ --enable-all-security-services \ --enable-url-protocols=https \ -H:EnableURLProtocols=http \ --initialize-at-build-time \ --initialize-at-run-time=io.netty.handler.ssl.util.BouncyCastleSelfSignedCertGenerator,io.netty.handler.ssl.ReferenceCountedOpenSslClientContext,io.netty.handler.ssl.ReferenceCountedOpenSslServerContext,io.netty.handler.ssl.JdkNpnApplicationProtocolNegotiator,io.netty.handler.ssl.JdkAlpnApplicationProtocolNegotiator,io.netty.handler.ssl.util.ThreadLocalInsecureRandom,io.netty.handler.ssl.JettyNpnSslEngine,io.netty.handler.ssl.ReferenceCountedOpenSslEngine,io.netty.handler.ssl.ConscryptAlpnSslEngine,io.netty.handler.ssl.JettyAlpnSslEngine$ClientEngine,io.netty.handler.ssl.JettyAlpnSslEngine$ServerEngine,io.netty.util.internal.ObjectCleaner,io.netty.handler.ssl.util.InsecureTrustManagerFactory

build log: Executing [ /root/tools/graalvm-ee-java8-19.3.0/jre/bin/java \ -XX:+UnlockExperimentalVMOptions \ -XX:+EnableJVMCI \ -Dtruffle.TrustAllTruffleRuntimeProviders=true \ -Dtruffle.TruffleRuntime=com.oracle.truffle.api.impl.DefaultTruffleRuntime \ -Dgraalvm.ForcePolyglotInvalid=true \ -Dgraalvm.locatorDisabled=true \ -d64 \ -XX:-UseJVMCIClassLoader \ -XX:+UseJVMCINativeLibrary \ -Xss10m \ -Xms1g \ -Xmx1676610760 \ -Duser.country=US \ -Duser.language=en \ -Dorg.graalvm.version=19.3.0 \ -Dorg.graalvm.config=EE \ -Dcom.oracle.graalvm.isaot=true \ -Djvmci.class.path.append=/root/tools/graalvm-ee-java8-19.3.0/jre/lib/jvmci/graal.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/jvmci/enterprise-graal.jar \ -javaagent:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/svm.jar \ -Djdk.internal.lambda.disableEagerInitialization=true \ -Djdk.internal.lambda.eagerlyInitialize=false \ -Djava.lang.invoke.InnerClassLambdaMetafactory.initializeLambdas=false \ -Dio.netty.noUnsafe=true \ -Xbootclasspath/a:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/boot/graaljs-scriptengine.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/boot/graal-sdk.jar \ -cp \ /root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/llvm-wrapper-shadowed.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/objectfile.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/llvm-platform-specific-shadowed.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/svm.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/graal-llvm.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/pointsto.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/javacpp-shadowed.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/svm-enterprise-llvm.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/svm-enterprise.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/svm-llvm.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/jvmci/graal.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/jvmci/jvmci-api.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/jvmci/jvmci-hotspot.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/jvmci/graal-management.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/jvmci/enterprise-graal.jar \ com.oracle.svm.hosted.NativeImageGeneratorRunner \ -watchpid \ 49131 \ -imagecp \ /root/tools/graalvm-ee-java8-19.3.0/jre/lib/boot/graaljs-scriptengine.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/boot/graal-sdk.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/llvm-wrapper-shadowed.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/objectfile.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/llvm-platform-specific-shadowed.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/svm.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/graal-llvm.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/pointsto.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/javacpp-shadowed.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/svm-enterprise-llvm.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/svm-enterprise.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/builder/svm-llvm.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/jvmci/graal.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/jvmci/jvmci-api.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/jvmci/jvmci-hotspot.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/jvmci/graal-management.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/jvmci/enterprise-graal.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/library-support.jar:/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/library-support-enterprise.jar:/root/OpenSource/client/target/client-full.jar \ -H:+SharedLibrary \ -H:Class=org.apache.rocketmq.graalvm.CInterface \ -H:+ReportUnsupportedElementsAtRuntime \ -H:+AllowIncompleteClasspath \ -H:+ReportExceptionStackTraces \ -H:+EnableAllSecurityServices \ -H:EnableURLProtocols=https \ -H:EnableURLProtocols=http \ -H:ClassInitialization=:build_time \ -H:ClassInitialization=io.netty.handler.ssl.util.BouncyCastleSelfSignedCertGenerator:run_time,io.netty.handler.ssl.ReferenceCountedOpenSslClientContext:run_time,io.netty.handler.ssl.ReferenceCountedOpenSslServerContext:run_time,io.netty.handler.ssl.JdkNpnApplicationProtocolNegotiator:run_time,io.netty.handler.ssl.JdkAlpnApplicationProtocolNegotiator:run_time,io.netty.handler.ssl.util.ThreadLocalInsecureRandom:run_time,io.netty.handler.ssl.JettyNpnSslEngine:run_time,io.netty.handler.ssl.ReferenceCountedOpenSslEngine:run_time,io.netty.handler.ssl.ConscryptAlpnSslEngine:run_time,io.netty.handler.ssl.JettyAlpnSslEngine:run_time,io.netty.handler.ssl.JettyAlpnSslEngine:run_time,io.netty.util.internal.ObjectCleaner:run_time,io.netty.handler.ssl.util.InsecureTrustManagerFactory:run_time \ -H:CLibraryPath=/root/tools/graalvm-ee-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64,/root/OpenSource/client/src/main/c/native \ -H:ReflectionConfigurationFiles=/root/OpenSource/client/tools/graal/reflection_config.json \ -H:Path=/root/OpenSource/client/build \ -H:Name=client-full ]

vongosling commented 4 years ago

Very similar to https://github.com/oracle/graal/issues/668, but this issue seems to the problem of the OpenSSL while not the JDK default SunEC.

chbatey commented 4 years ago

I also get an unsatisfied link error with GraalVM 20.0.0.

I've treid various gRPC java versions and get this at runtime:

java.lang.UnsatisfiedLinkError: io.grpc.netty.shaded.io.netty.internal.tcnative.NativeStaticallyReferencedJniMethods.sslOpCipherServerPreference()I [symbol: Java_io_grpc_netty_shaded_io_netty_internal_tcnative_NativeStaticallyReferencedJniMethods_sslOpCipherServerPreference or Java_io_grpc_netty_shaded_io_netty_internal_tcnative_NativeStaticallyReferencedJniMethods_sslOpCipherServerPreference__]
        at com.oracle.svm.jni.access.JNINativeLinkage.getOrFindEntryPoint(JNINativeLinkage.java:145)
        at com.oracle.svm.jni.JNIGeneratedMethodSupport.nativeCallAddress(JNIGeneratedMethodSupport.java:57)
        at io.grpc.netty.shaded.io.netty.internal.tcnative.NativeStaticallyReferencedJniMethods.sslOpCipherServerPreference(NativeStaticallyReferencedJniMethods.java)
        at io.grpc.netty.shaded.io.netty.internal.tcnative.SSL.<clinit>(SSL.java:67)
        at com.oracle.svm.core.hub.ClassInitializationInfo.invokeClassInitializer(ClassInitializationInfo.java:350)
        at com.oracle.svm.core.hub.ClassInitializationInfo.initialize(ClassInitializationInfo.java:270)
        at java.lang.Class.ensureInitialized(DynamicHub.java:467)
        at io.grpc.netty.shaded.io.netty.handler.ssl.OpenSsl.<clinit>(OpenSsl.java:123)
        at com.oracle.svm.core.hub.ClassInitializationInfo.invokeClassInitializer(ClassInitializationInfo.java:350)
        at com.oracle.svm.core.hub.ClassInitializationInfo.initialize(ClassInitializationInfo.java:270)
        at java.lang.Class.ensureInitialized(DynamicHub.java:467)
        at io.grpc.netty.shaded.io.grpc.netty.GrpcSslContexts.defaultSslProvider(GrpcSslContexts.java:244)
        at io.grpc.netty.shaded.io.grpc.netty.GrpcSslContexts.configure(GrpcSslContexts.java:171)
        at io.grpc.netty.shaded.io.grpc.netty.GrpcSslContexts.forClient(GrpcSslContexts.java:120)
dzou commented 4 years ago

Getting the same error, @ShannonDing did you ever figure this out?

ShannonDing commented 4 years ago

Getting the same error, @ShannonDing did you ever figure this out?

Sorry, I have not found a good solution as so far, and I am still looking forward to some guidance or suggestions to solve this problem from the Graal community.

majk-p commented 4 years ago

Any news with this issue?

dzou commented 4 years ago

Hello, Google is working on official support for the client libraries with native image compilation here: https://github.com/GoogleCloudPlatform/google-cloud-graalvm-support

You can try following the instructions and adding the dependency to your project; we were able to find the solution to the native library error.