在一个Linux发行版上构建的Java可以在所有其他Linux发行版上工作吗?



如果我在一个发行版(RHEL, Ubuntu等)上使用jlink构建最小化的JRE,它会在所有其他发行版上工作吗?作为一个基本的测试,我在RHEL上创建了一个jre,它在Ubuntu上运行得很好,但是发行版的变化太多了,我无法全部测试。作为一般的经验法则,我是否应该期望在任何linux系统上构建的java在另一个linux系统上工作,假设相同的底层架构(amd64, aarch64等)?

所有可用的证据表明,是的,您可以期望应用程序在几乎所有Linux系统上工作。jlink映像树有自己的lib目录,其中包含许多共享库。jvm经过了全面的测试,我猜Linux版本至少在经过认证的系统配置上进行了全面的测试。

我没有详细检查jlink映像树中的每个文件,但是我从来没有注意到这些Linux发行版有什么特别之处。(我在Debian上构建。)

出于好奇,我在我的jlink应用程序中对简化的java二进制文件做了ldd java。这是一个简短的列表:

linux-vdso.so.1 (0x00007ffecf94b000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f85827ca000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8582795000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f858278f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f85825ba000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8582816000)

(我省略了libjli。因此,它在图像树中。)

我假设它可以在任何存在这六个库的系统上运行。我怀疑一个典型的Linux系统会缺少其中任何一个。

相关内容

最新更新