Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[GR-58059] Statically Linked native image does not produce/embed all the needed .so next to the executable #8911

Open
mpalourdio opened this issue May 13, 2024 · 11 comments
Assignees

Comments

@mpalourdio
Copy link

mpalourdio commented May 13, 2024

Hello,

I have a working little app (Spring Boot 3, maven, latest graalvm CE, linux) here.
I want to compile it with musl, so it's more portable regarding glibc.

At the moment, the executable is produced without any problem in github actions (and on my work station) : the executable and all the .so are well produced in target.

I have installed musl and zlib like stated here , and have changed my maven configuration :

        <plugins>
            <plugin>
                <groupId>org.graalvm.buildtools</groupId>
                <artifactId>native-maven-plugin</artifactId>
                <configuration>
                    <buildArgs>
                        <buildArg>--static</buildArg>
                        <buildArg>--libc=musl</buildArg>
                    </buildArgs>
                </configuration>
            </plugin>

The compilation is succesful, but the .so are not next to the executable (expected, as I imagine they are "embedded" in the final executable), then the app fails with Caused by: java.lang.UnsatisfiedLinkError: No awt in java.library.path for example, and so on.

I can see in the log that the .so are not produced

Produced artifacts:
 /home/ben/IdeaProjects/flhacker/target/build-artifacts.json (build_info)
 /home/ben/IdeaProjects/flhacker/target/flhacker (executable)

Am I missing something ? Thanks !

 - GraalVM version : `OpenJDK 64-Bit Server VM GraalVM CE 21.0.2+13.1 (build 21.0.2+13-jvmci-23.1-b30, mixed mode, sharing)`
 - JDK major version: 21
 - OS: ubuntu 20.04 (work station) and 22.04 (github actions OS)
 - Architecture: x86_64
@mpalourdio mpalourdio added the bug label May 13, 2024
@mpalourdio mpalourdio changed the title Statically Linked native image does not produce all the needed .so next to the executable Statically Linked native image does not produce/embed all the needed .so next to the executable May 13, 2024
@oubidar-Abderrahim oubidar-Abderrahim self-assigned this May 14, 2024
@oubidar-Abderrahim
Copy link
Member

Thank you for reaching out, we'll take a look into this shortly

@mpalourdio
Copy link
Author

FWIW, -H:+StaticExecutableWithDynamicLibC leads to the same error

@oubidar-Abderrahim
Copy link
Member

Sorry, I couldn't reproduce this issue locally.
Could you please share a reproducer that I can use to verify?
Thank you

@mpalourdio
Copy link
Author

mpalourdio commented Jul 10, 2024

@oubidar-Abderrahim Sure, clone this repo, and checkout the musl branch. I use GraalVM CE 21

Once compiled, the native executable does not 'embed'/link the .so, and it fails at runtime with java.lang.UnsatisfiedLinkError: No awt in java.library.path for example, which tends to prove that the static linking has failed

Checkout main, the app compiles and run successfully

@mpalourdio
Copy link
Author

mpalourdio commented Jul 14, 2024

A bit more of context, after installing Liberica-NIK-23.1.3-1 (build 21.0.3+10-LTS) from sdkman

  • -H:+StaticExecutableWithDynamicLibC works with Liberica, not with graalvm CE
  • musl fails with both.

@oubidar-Abderrahim
Copy link
Member

I was able to statically build the repo you shared, I believe this is an issue of the version of musl toolchain used. Static image are currently working with v10.2.1

> x86_64-linux-musl-gcc --version
x86_64-linux-musl-gcc (GCC) 10.2.1 20210227
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Also make sure to follow the instruction at: https://www.graalvm.org/22.1/reference-manual/native-image/StaticImages/

@mpalourdio
Copy link
Author

I can build too! But can you run it without any error with missing awt for example?

@oubidar-Abderrahim
Copy link
Member

Sorry, I wasn't clear enough, I was able to both build and run the application statically, without any AWT errors

@mpalourdio
Copy link
Author

mpalourdio commented Aug 2, 2024

Here is my version

$ x86_64-linux-musl-gcc --version
x86_64-linux-musl-gcc (GCC) 10.2.1 20210227
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Did you build with graalvm CE?

@oubidar-Abderrahim
Copy link
Member

image

@mpalourdio
Copy link
Author

01-Army of Me.mp3.zip
Can you please download this zip, extract the .mp3 file and then run

flhacker -f /path/to/extracted.mp3

You should see the fail once the code reaches something that needs awt

Thanks again !

@oubidar-Abderrahim oubidar-Abderrahim changed the title Statically Linked native image does not produce/embed all the needed .so next to the executable [GR-58059] Statically Linked native image does not produce/embed all the needed .so next to the executable Sep 10, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants