quarkusio / quarkus

Quarkus: Supersonic Subatomic Java.
https://quarkus.io
Apache License 2.0
13.73k stars 2.67k forks source link

quarkus is not compatible with graalvm 21 #36055

Closed youngcle closed 1 year ago

youngcle commented 1 year ago

Describe the bug

Oracle released Java 21 and also GraalVM 21 on 2023-09-19, and I switch my app jdk to Oracle GraalVM 21 to do some native-image test.

before I turned to GraalVM 21, I'm with GraalVM 17.0.8+9.1 (build 17.0.8+9-LTS-jvmci-23.0-b14) and everything is right in X86 (ubuntu 2210) and arm (ubuntu 1804 in Qemu) both.

after switched, JVM version package goes well.

the Native image in X86,compiler complaint the following message:

java.lang.IllegalAccessError: class io.quarkus.runner.Feature (in unnamed module @0x6cf0a747) cannot access class org.graalvm.nativeimage.impl.RuntimeClassInitializationSupport (in module org.graalvm.nativeimage) because module org.graalvm.nativeimage does not export org.graalvm.nativeimage.impl to unnamed module @0x6cf0a747

but it do not fail the compile process, and the native-image runner goes well (likely)

When I try to make the native image in ARM, compiler failed at the last step "creating image" with message"

java.lang.RuntimeException: There was an error linking the native image: Linker command exited with 1

Linker command executed:
/usr/bin/gcc -z noexecstack -Wl,--gc-sections -Wl,--version-script,/tmp/SVM-13567779887183742065/exported_symbols.list -Wl,-x -o /data/cast503/develop/develop/sat-scheduler-edge/edge-command/target/edge-command-1.0.0-SNAPSHOT-native-image-source-jar/edge-command-1.0.0-SNAPSHOT-runner edge-command-1.0.0-SNAPSHOT-runner.o /root/graalvm-jdk-21+35.1/lib/svm/clibraries/linux-aarch64/liblibchelper.a /root/graalvm-jdk-21+35.1/lib/static/linux-aarch64/glibc/libnet.a /root/graalvm-jdk-21+35.1/lib/static/linux-aarch64/glibc/libextnet.a /root/graalvm-jdk-21+35.1/lib/static/linux-aarch64/glibc/libnio.a /root/graalvm-jdk-21+35.1/lib/static/linux-aarch64/glibc/libmanagement_ext.a /root/graalvm-jdk-21+35.1/lib/static/linux-aarch64/glibc/libjava.a /root/graalvm-jdk-21+35.1/lib/static/linux-aarch64/glibc/libzip.a /root/graalvm-jdk-21+35.1/lib/svm/clibraries/linux-aarch64/libjvm.a -Wl,--export-dynamic -v -L/tmp/SVM-13567779887183742065 -L/root/graalvm-jdk-21+35.1/lib/static/linux-aarch64/glibc -L/root/graalvm-jdk-21+35.1/lib/svm/clibraries/linux-aarch64 -lg1gc-cr -ldl -lm -lpthread -lstdc++ -lz -ldl -lpthread -lrt -no-pie

Linker command output:
Using built-in specs.
COLLECT_GCC=/usr/bin/gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/aarch64-linux-gnu/7/lto-wrapper
Target: aarch64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 7.5.0-3ubuntu1~18.04' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=aarch64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --enable-multiarch --enable-fix-cortex-a53-843419 --disable-werror --enable-checking=release --build=aarch64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu
Thread model: posix
gcc version 7.5.0 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 
COMPILER_PATH=/usr/lib/gcc/aarch64-linux-gnu/7/:/usr/lib/gcc/aarch64-linux-gnu/7/:/usr/lib/gcc/aarch64-linux-gnu/:/usr/lib/gcc/aarch64-linux-gnu/7/:/usr/lib/gcc/aarch64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/aarch64-linux-gnu/7/:/usr/lib/gcc/aarch64-linux-gnu/7/../../../aarch64-linux-gnu/:/usr/lib/gcc/aarch64-linux-gnu/7/../../../../lib/:/lib/aarch64-linux-gnu/:/lib/../lib/:/usr/lib/aarch64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/aarch64-linux-gnu/7/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-z' 'noexecstack' '-o' '/data/cast503/develop/develop/sat-scheduler-edge/edge-command/target/edge-command-1.0.0-SNAPSHOT-native-image-source-jar/edge-command-1.0.0-SNAPSHOT-runner' '-v' '-L/tmp/SVM-13567779887183742065' '-L/root/graalvm-jdk-21+35.1/lib/static/linux-aarch64/glibc' '-L/root/graalvm-jdk-21+35.1/lib/svm/clibraries/linux-aarch64' '-no-pie' '-mlittle-endian' '-mabi=lp64'
 /usr/lib/gcc/aarch64-linux-gnu/7/collect2 -plugin /usr/lib/gcc/aarch64-linux-gnu/7/liblto_plugin.so -plugin-opt=/usr/lib/gcc/aarch64-linux-gnu/7/lto-wrapper -plugin-opt=-fresolution=/tmp/ccRS9L0e.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr --hash-style=gnu --as-needed -dynamic-linker /lib/ld-linux-aarch64.so.1 -X -EL -maarch64linux --fix-cortex-a53-843419 -z relro -o /data/cast503/develop/develop/sat-scheduler-edge/edge-command/target/edge-command-1.0.0-SNAPSHOT-native-image-source-jar/edge-command-1.0.0-SNAPSHOT-runner -z noexecstack /usr/lib/gcc/aarch64-linux-gnu/7/../../../aarch64-linux-gnu/crt1.o /usr/lib/gcc/aarch64-linux-gnu/7/../../../aarch64-linux-gnu/crti.o /usr/lib/gcc/aarch64-linux-gnu/7/crtbegin.o -L/tmp/SVM-13567779887183742065 -L/root/graalvm-jdk-21+35.1/lib/static/linux-aarch64/glibc -L/root/graalvm-jdk-21+35.1/lib/svm/clibraries/linux-aarch64 -L/usr/lib/gcc/aarch64-linux-gnu/7 -L/usr/lib/gcc/aarch64-linux-gnu/7/../../../aarch64-linux-gnu -L/usr/lib/gcc/aarch64-linux-gnu/7/../../../../lib -L/lib/aarch64-linux-gnu -L/lib/../lib -L/usr/lib/aarch64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/aarch64-linux-gnu/7/../../.. --gc-sections --version-script /tmp/SVM-13567779887183742065/exported_symbols.list -x edge-command-1.0.0-SNAPSHOT-runner.o /root/graalvm-jdk-21+35.1/lib/svm/clibraries/linux-aarch64/liblibchelper.a /root/graalvm-jdk-21+35.1/lib/static/linux-aarch64/glibc/libnet.a /root/graalvm-jdk-21+35.1/lib/static/linux-aarch64/glibc/libextnet.a /root/graalvm-jdk-21+35.1/lib/static/linux-aarch64/glibc/libnio.a /root/graalvm-jdk-21+35.1/lib/static/linux-aarch64/glibc/libmanagement_ext.a /root/graalvm-jdk-21+35.1/lib/static/linux-aarch64/glibc/libjava.a /root/graalvm-jdk-21+35.1/lib/static/linux-aarch64/glibc/libzip.a /root/graalvm-jdk-21+35.1/lib/svm/clibraries/linux-aarch64/libjvm.a --export-dynamic -lg1gc-cr -ldl -lm -lpthread -lstdc++ -lz -ldl -lpthread -lrt -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/aarch64-linux-gnu/7/crtend.o /usr/lib/gcc/aarch64-linux-gnu/7/../../../aarch64-linux-gnu/crtn.o
/root/graalvm-jdk-21+35.1/lib/svm/clibraries/linux-aarch64/liblibchelper.a(cSunMiscSignal.o): In function `cSunMiscSignal_atomicIncrement':
graal/substratevm/mxbuild/linux-aarch64/com.oracle.svm.native.libchelper/aarch64/graal/substratevm/src/com.oracle.svm.native.libchelper/src/cSunMiscSignal.c:247: undefined reference to `__aarch64_ldadd8_acq_rel'
/root/graalvm-jdk-21+35.1/lib/svm/clibraries/linux-aarch64/liblibchelper.a(cSunMiscSignal.o): In function `cSunMiscSignal_atomicCompareAndSwap_int':
graal/substratevm/mxbuild/linux-aarch64/com.oracle.svm.native.libchelper/aarch64/graal/substratevm/src/com.oracle.svm.native.libchelper/src/cSunMiscSignal.c:273: undefined reference to `__aarch64_cas4_acq_rel'
/root/graalvm-jdk-21+35.1/lib/svm/clibraries/linux-aarch64/liblibchelper.a(cSunMiscSignal.o): In function `cSunMiscSignal_atomicCompareAndSwap_long':
graal/substratevm/mxbuild/linux-aarch64/com.oracle.svm.native.libchelper/aarch64/graal/substratevm/src/com.oracle.svm.native.libchelper/src/cSunMiscSignal.c:278: undefined reference to `__aarch64_cas8_acq_rel'
collect2: error: ld returned 1 exit status
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.image.NativeImageViaCC.handleLinkerFailure(NativeImageViaCC.java:202)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.image.NativeImageViaCC.runLinkerCommand(NativeImageViaCC.java:152)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.image.NativeImageViaCC.write(NativeImageViaCC.java:118)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:742)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:551)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:538)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:720)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.start(NativeImageGeneratorRunner.java:142)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:97)

Expected behavior

compitable with graalvm 21

finish the build of native-image runner in x86 and arm, peaceful and quietly,just like GraalVM 17.

Actual behavior

graalvm 21

Output of uname -a or ver

x86 6.2.0-33-generic #33~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Sep 7 10:33:52 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

arm by qemu Linux ubuntu 4.15.0-213-generic #224-Ubuntu SMP Mon Jun 19 13:29:44 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux

Output of java -version

x86 Java(TM) SE Runtime Environment Oracle GraalVM 21+35.1 (build 21+35-jvmci-23.1-b15)

arm by qemu Java(TM) SE Runtime Environment Oracle GraalVM 21+35.1 (build 21+35-jvmci-23.1-b15)

Quarkus version or git rev

Powered by Quarkus 3.3.3

No response

Build tool (ie. output of mvnw --version or gradlew --version)

Apache Maven 3.8.7

youngcle commented 1 year ago

The warn in X86 native-image build, I found the reason is that Oracle removed the org.graalvm.sdk and splitted into some individual package in GraalVM 21.

although the build can goes to the end , the native image runner goes well in my common test case(likely) I'm not sure there are no problem in other routines.

rsvoboda commented 1 year ago

Can you try Quarkus 3.4.1 (just released)? I think https://github.com/quarkusio/quarkus/pull/35377 could handle the trouble on x86_64. (I tried my app with 21-graalce from sdkman and native compilation worked without any IllegalAccessError)

youngcle commented 1 year ago

Can you try Quarkus 3.4.1 (just released)? I think #35377 could handle the trouble on x86_64. (I tried my app with 21-graalce from sdkman and native compilation worked without any IllegalAccessError)

yes, I believe Quarkus 3.4.1 has fixed the warn on x86. I'll give it a try tomorrow.

youngcle commented 1 year ago

I switched quarkus 3.4.1 and compile finished smoothly,the warns has been cleaned .

the fails on arm ubuntu1804 are still there, I issued that error to graalvm too.

youngcle commented 1 year ago

the link fail problem on ubuntu 1804 was solved, a guy there gived a right solution

this issue should be closed.

oracle/graal/7467