最近我开始在带有Oracle Java 8的Docker容器中使用Jenkins。使用Gradle构建项目时,我收到以下错误消息:
UnsatisfiedLinkError: linux-amd64/libnative-platform.so: libstdc++.so.6: cannot open shared object file: No such file or directory
在詹金斯,我选择了“强制GRADLE_USER_HOME使用工作空间”,根本没有运气。文件libnative-platform.so位于预期目录中,但gradle不起作用。我尝试在容器中安装Gradle并得到相同的结果。我的最后一个设置是使用Gradle Wrapper。
我到处寻找,但我的任务没有运气。如果有人能够了解这一点,我感激不尽。
答案 0 :(得分:6)
您可以通过在Alpine
中安装libstdc++
软件包来完成此工作
apk add --no-cache libstdc++
答案 1 :(得分:2)
JRE / JDK的libstdc ++。so.6:无法打开共享对象文件
libnative-platform.so
与gnu libc相关联,但Alpine图像基于musl libc。
简单的解决方案是使用像Debian这样的基于glibc的泊坞窗图像,如果你想坚持使用Alpine,你可能会在github issue找到一些线索。
答案 2 :(得分:2)
问题是Oracle JDK与GNU C库(glibc)链接,这里没有。
Alpine Linux不使用glibc作为Debian,Fedora或Gentoo等传统发行版。相反,它使用musl libc,一个轻量级,快速,简单且符合标准的C库(即glibc不是的所有内容)。
解决方案非常简单,只需从Alpine存储库(包openjdk8)安装OpenJDK即可。不用担心兼容性,Oracle JDK 8只是OpenJDK 8的品牌分布,代码库几乎相同。
如果您出于任何原因坚持使用Oracle JDK并且根本不关心安全性*,那么请不要使用Alpine Linux,而是使用一些传统的分发...
您可以在JRuby wiki上的文章JRuby on Alpine Linux中阅读更多内容。
* 由于美国的政策,Oracle JDK默认限制加密。它与Ask.com广告软件一起发布。因为它只是作为一个BLOB分发,你不知道里面还有什么不好......