I have a micronaut project setup in kotlin.
I was able to build graalvm native image earlier. Now I have added two aws dependencies in this project :
implementation("software.amazon.awssdk:s3")
implementation("software.amazon.awssdk:dynamodb")
As soon as I have added these dependencies I am getting below linker error.
The build process encountered an unexpected error:
> java.lang.RuntimeException: There was an error linking the native image: Linker command exited with 1
Linker command executed:
/usr/bin/gcc -z noexecstack -z notext -Wl,--gc-sections -Wl,--version-script,/tmp/SVM-10977021202506435398/exported_symbols.list -o /home/app/application application.o /usr/lib/graalvm/lib/svm/clibraries/linux-aarch64/glibc/liblibchelper.a /usr/lib/graalvm/lib/static/linux-aarch64/glibc/libnet.a /usr/lib/graalvm/lib/static/linux-aarch64/glibc/libjaas.a /usr/lib/graalvm/lib/static/linux-aarch64/glibc/libextnet.a /usr/lib/graalvm/lib/static/linux-aarch64/glibc/libnio.a /usr/lib/graalvm/lib/static/linux-aarch64/glibc/libmanagement_ext.a /usr/lib/graalvm/lib/static/linux-aarch64/glibc/libjava.a /usr/lib/graalvm/lib/static/linux-aarch64/glibc/libzip.a /usr/lib/graalvm/lib/svm/clibraries/linux-aarch64/glibc/libjvm.a -Wl,--export-dynamic -v -L/tmp/SVM-10977021202506435398 -L/usr/lib/graalvm/lib/static/linux-aarch64/glibc -L/usr/lib/graalvm/lib/svm/clibraries/linux-aarch64/glibc -L/usr/lib/graalvm/lib/svm/clibraries/linux-aarch64 -L/usr/lib/graalvm/lib/svm/clibraries -lz -ldl -lpthread -lrt
Linker command output:
Using built-in specs.
COLLECT_GCC=/usr/bin/gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/aarch64-amazon-linux/11/lto-wrapper
Target: aarch64-amazon-linux
Configured with: ../configure --enable-bootstrap --enable-host-pie --enable-host-bind-now --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://github.com/amazonlinux/amazon-linux-2022 --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-11.5.0-20240719/obj-aarch64-amazon-linux/isl-install --enable-multilib --with-linker-hash-style=gnu --enable-gnu-indirect-function --with-tune=neoverse-n1 --with-arch=armv8.2-a+crypto --build=aarch64-amazon-linux --with-build-config=bootstrap-lto --enable-link-serialization=1
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.5.0 20240719 (Red Hat 11.5.0-5) (GCC)
COMPILER_PATH=/usr/libexec/gcc/aarch64-amazon-linux/11/:/usr/libexec/gcc/aarch64-amazon-linux/11/:/usr/libexec/gcc/aarch64-amazon-linux/:/usr/lib/gcc/aarch64-amazon-linux/11/:/usr/lib/gcc/aarch64-amazon-linux/
LIBRARY_PATH=/usr/lib/gcc/aarch64-amazon-linux/11/:/usr/lib/gcc/aarch64-amazon-linux/11/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/aarch64-amazon-linux/11/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-z' 'noexecstack' '-z' 'notext' '-o' '/home/app/application' '-v' '-L/tmp/SVM-10977021202506435398' '-L/usr/lib/graalvm/lib/static/linux-aarch64/glibc' '-L/usr/lib/graalvm/lib/svm/clibraries/linux-aarch64/glibc' '-L/usr/lib/graalvm/lib/svm/clibraries/linux-aarch64' '-L/usr/lib/graalvm/lib/svm/clibraries' '-march=armv8.2-a+crypto' '-mtune=neoverse-n1' '-mlittle-endian' '-mabi=lp64' '-dumpdir' '/home/app/application.'
/usr/libexec/gcc/aarch64-amazon-linux/11/collect2 -plugin /usr/libexec/gcc/aarch64-amazon-linux/11/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/aarch64-amazon-linux/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccrxiWKL.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 --no-add-needed --eh-frame-hdr --hash-style=gnu -dynamic-linker /lib/ld-linux-aarch64.so.1 -X -EL -maarch64linux -o /home/app/application -z noexecstack -z notext /usr/lib/gcc/aarch64-amazon-linux/11/../../../../lib64/crt1.o /usr/lib/gcc/aarch64-amazon-linux/11/../../../../lib64/crti.o /usr/lib/gcc/aarch64-amazon-linux/11/crtbegin.o -L/tmp/SVM-10977021202506435398 -L/usr/lib/graalvm/lib/static/linux-aarch64/glibc -L/usr/lib/graalvm/lib/svm/clibraries/linux-aarch64/glibc -L/usr/lib/graalvm/lib/svm/clibraries/linux-aarch64 -L/usr/lib/graalvm/lib/svm/clibraries -L/usr/lib/gcc/aarch64-amazon-linux/11 -L/usr/lib/gcc/aarch64-amazon-linux/11/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/aarch64-amazon-linux/11/../../.. --gc-sections --version-script /tmp/SVM-10977021202506435398/exported_symbols.list application.o /usr/lib/graalvm/lib/svm/clibraries/linux-aarch64/glibc/liblibchelper.a /usr/lib/graalvm/lib/static/linux-aarch64/glibc/libnet.a /usr/lib/graalvm/lib/static/linux-aarch64/glibc/libjaas.a /usr/lib/graalvm/lib/static/linux-aarch64/glibc/libextnet.a /usr/lib/graalvm/lib/static/linux-aarch64/glibc/libnio.a /usr/lib/graalvm/lib/static/linux-aarch64/glibc/libmanagement_ext.a /usr/lib/graalvm/lib/static/linux-aarch64/glibc/libjava.a /usr/lib/graalvm/lib/static/linux-aarch64/glibc/libzip.a /usr/lib/graalvm/lib/svm/clibraries/linux-aarch64/glibc/libjvm.a --export-dynamic -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-amazon-linux/11/crtend.o /usr/lib/gcc/aarch64-amazon-linux/11/../../../../lib64/crtn.o
/usr/bin/ld: application.o:(.data+0x520): undefined reference to `Java_jdk_internal_misc_ScopedMemoryAccess_closeScope0'
collect2: error: ld returned 1 exit status
Please inspect the generated error report at:
/home/app/svm_err_b_20251005T105608.172_pid29.md
If you are unable to resolve this problem, please file an issue with the error report at:
https://graalvm.org/support
> Task :nidhi-app:dockerBuildNative FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':nidhi-app:dockerBuildNative'.
> Could not build image: The command '/bin/sh -c native-image --exclude-config .*/libs/netty-common-4.2.2.Final.jar ^/META-INF/native-image/.* --exclude-config .*/libs/netty-buffer-4.2.2.Final.jar ^/META-INF/native-image/.* --exclude-config .*/libs/netty-transport-4.2.2.Final.jar ^/META-INF/native-image/.* --exclude-config .*/libs/netty-codec-http-4.2.2.Final.jar ^/META-INF/native-image/.* --exclude-config .*/libs/netty-handler-4.2.2.Final.jar ^/META-INF/native-image/.* --exclude-config .*/libs/netty-codec-http2-4.2.2.Final.jar ^/META-INF/native-image/.* -cp /home/app/libs/*.jar:/home/app/resources:/home/app/application.jar --no-fallback -o application -H:ConfigurationFileDirectories=/home/app/config-dirs/generateResourcesConfigFile,/home/app/config-dirs/org.jetbrains.kotlin/kotlin-stdlib/1.7.10,/home/app/config-dirs/com.fasterxml.jackson.core/jackson-databind/2.15.2,/home/app/config-dirs/io.netty/netty-buffer/4.1.80.Final,/home/app/config-dirs/io.netty/netty-common/4.1.115.Final,/home/app/config-dirs/io.netty/netty-transport/4.1.115.Final,/home/app/config-dirs/io.netty/netty-codec-http/4.1.80.Final,/home/app/config-dirs/io.netty/netty-handler/4.1.80.Final,/home/app/config-dirs/io.netty/netty-codec-http2/4.1.80.Final,/home/app/config-dirs/com.github.ben-manes.caffeine/caffeine/3.1.2,/home/app/config-dirs/org.apache.httpcomponents/httpclient/4.5.14,/home/app/config-dirs/commons-logging/commons-logging/1.2,/home/app/config-dirs/ch.qos.logback/logback-classic/1.4.9,/home/app/config-dirs/com.zaxxer/HikariCP/5.0.1,/home/app/config-dirs/org.postgresql/postgresql/42.7.3 -Ob io.micronaut.function.aws.runtime.MicronautLambdaRuntime' returned a non-zero code: 1
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.
BUILD FAILED in 1m 45s
41 actionable tasks: 8 executed, 33 up-to-date
Also, if I remove these two dependencies, the graal native build is going fine. In addition to this, the normal build is going fine and project is running successfully if I do normal run and build. Only when I am trying to build a native image using graal, it is failing with linker error.
Native image version are as below
vishalkumargourav@Vishals-MacBook-Pro nidhi % native-image --version
native-image 21.0.2 2024-01-16
GraalVM Runtime Environment GraalVM CE 21.0.2+13.1 (build 21.0.2+13-jvmci-23.1-b30)
Substrate VM GraalVM CE 21.0.2+13.1 (build 21.0.2+13, serial gc)
vishalkumargourav@Vishals-MacBook-Pro nidhi %
Finally after 6 days of debugging, found a solution.
This has got something to do with the experimental feature being used by AWS libraries.
For that to be enabled during native build, you need to pass below flag.
buildArgs.add("--enable-preview")
Effectively your graalvmNative block would become :
graalvmNative {
toolchainDetection.set(false)
binaries {
named("main") {
imageName.set("mn-graalvm-application")
buildArgs.add("-Ob")
buildArgs.add("--enable-preview")
}
}
}
Hope this helps someone.