Skip to content

Migration Guide 3.2

Clement Escoffier edited this page Jun 28, 2023 · 15 revisions

Native Compilation - Native executables and .so files

Due to changes made to GraalVM/Mandrel, if you are using an extension that is relying on .so files (such as the AWT extension), you need to add these .so files to the native container similarly to:

...
# Copy of the .so files to the container
COPY --chown=1001:root target/*.so /work/
COPY --chown=1001:root target/*-runner /work/application
...

Native Compilation - Work around missing CPU features

When building on recent machines and running your native executable on older machines, you may see the following failure when starting the application:

The current machine does not support all of the following CPU features that are required by the image: [CX8, CMOV, FXSR, MMX, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, POPCNT, LZCNT, AVX, AVX2, BMI1, BMI2, FMA].
Please rebuild the executable with an appropriate setting of the -march option.

This error message means that the native compilation used more advanced instruction sets not supported by the CPU running the application. To work around that issue, add the following line to the application.properties:

quarkus.native.additional-build-args=-march=compatibility

Then, rebuild your native executable. This setting forces the native compilation to use an older instruction set, increasing the chance of compatibility.

To explicitly define the target architecture, run native-image -march=list to get the supported configurations and then set -march to one of them, e.g., quarkus.native.additional-build-args=-march=x86-64-v4. If you are targeting an AMD64 host, -march=x86-64-v2 would work in most cases.

Note
The march parameter is only available on GraalVM 23+.

Current Version

Migration Guide 3.16

Next Version

Migration Guide 3.17

Clone this wiki locally