Gradle build fails in jenkins:alpine container: UnsatisfiedLinkError: linux-amd64/libnative-platform.so: libstdc++.so.6:

倾然丶 夕夏残阳落幕 提交于 2019-12-12 19:14:46

问题


Recently I started using Jenkins in a Docker container with Oracle Java 8. When building a project with Gradle I get this error message:

UnsatisfiedLinkError: linux-amd64/libnative-platform.so: libstdc++.so.6: cannot open shared object file: No such file or directory

In Jenkins I selected "Force GRADLE_USER_HOME to use workspace" with no luck at all. The file libnative-platform.so is in the directory expected but gradle won't work. I tried installing Gradle in the container and same result. My last setup is with Gradle Wrapper.

I looked everywhere but I had no luck on my quest. I appreciate if someone can shed a light on this.


回答1:


You can make this work by installing the libstdc++ package in Alpine

apk add --no-cache libstdc++



回答2:


libstdc++.so.6: cannot open shared object file

libnative-platform.so of the JRE/JDK is linked against gnu libc but Alpine images are based on musl libc.

The easy solution is to use a glibc based docker image like Debian, if you want to stick with Alpine you might find some clues in this github issue.




回答3:


The problem is that Oracle JDK is linked against GNU C library (glibc) that is not available here.

Alpine Linux doesn’t use glibc as conventional distributions like Debian, Fedora or Gentoo. Instead, it uses musl libc, a lightweight, fast, simple and standards-conform C library (i.e. everything that glibc is not).

The solution is very simple, just install OpenJDK from the Alpine repository (package openjdk8). Don’t worry about compatibility, Oracle JDK 8 is just branded distribution of OpenJDK 8, the code base is nearly identical.

If you insist on Oracle JDK for whatever reason and don’t care about security at all*, then don’t use Alpine Linux, but some conventional distribution…

You can read more in my article JRuby on Alpine Linux on the JRuby wiki.

* Oracle JDK has restricted cryptography by default, because of U.S. policy. It’s distributed with Ask.com adware. And because it’s distributed only as a BLOB, you can’t know what else bad is inside…



来源:https://stackoverflow.com/questions/37796958/gradle-build-fails-in-jenkinsalpine-container-unsatisfiedlinkerror-linux-amd6

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!