Linux Install4j:Unix安装程序导致bin/unpack200:未找到

Linux Install4j:Unix安装程序导致bin/unpack200:未找到,linux,64-bit,install4j,Linux,64 Bit,Install4j,我们使用install4j创建的设置(我们仍然使用5.0.11)。在新的本地unix计算机(Linux版本3.8.13-44.1.4.el6uek.x86_64)上,此安装失败,日志显示: Unpacking JRE ... micsetup.sh: 210: micsetup.sh: bin/unpack200: not found Preparing JRE ... Error unpacking jar files. The architecture or bitness (32/64)

我们使用install4j创建的设置(我们仍然使用5.0.11)。在新的本地unix计算机(Linux版本3.8.13-44.1.4.el6uek.x86_64)上,此安装失败,日志显示:

Unpacking JRE ...
micsetup.sh: 210: micsetup.sh: bin/unpack200: not found
Preparing JRE ...
Error unpacking jar files. The architecture or bitness (32/64) of the bundled JVM might not match your machine.
搜索此错误时,我发现以下内容:

程序尝试运行不存在的文件/bin/unpack200。但是,文件/usr/bin/unpack200确实存在。这是因为该文件位于不同的位置,具体取决于所用机器的体系结构-如果是32位,则位于一个位置,如果是64位,则位于另一个位置。我遇到这个问题是因为该文件是在32位体系结构上运行的,但我使用的是64位机器。因此,要解决此问题,必须安装32位库

跑步后

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
我们的设置工作正常

我的问题:有没有办法在install4j中配置“Unix安装程序”来构建安装程序,即它可以在上述64位Linux系统上运行,而无需在此系统上安装其他库?我想不是所有的客户都会同意这一点

提前谢谢


Frank

不,install4j中没有此类功能。在Linux上捆绑JRE通常是有问题的


一种策略是为安装程序提供32位JRE和64位JRE。

为什么不尝试修改micsetup.sh,以便自己检测体系结构并使用正确的路径?您打包了哪些JRE?我不记得OpenJDK有过这样的问题,使用它的约束性更小,因为它不在Oracle二进制代码许可证下。修改install4j创建的shell脚本是没有选择的。我们决定遵循Ingo的答案,创建了单独的unix媒体文件,包括32位或64位JRE。Ingo的建议更易于实现,如果提供几个软件包不会让您感到困扰的话,这是一种可行的方法。在Linux上捆绑JRE通常没有问题,这是完全可行的。不要混淆Linux限制和install4j限制。启动脚本只需调用与应用程序捆绑的JRE,在Mac OS X和Windows下也是如此。这就是我所做的,它是有效的。据我所知,install4j不支持多体系结构包,无论如何,最好按照您的建议为每个体系结构提供一个单独的包,特别是如果您使用一些本机库。@guuessej您是对的,install4j不支持多个体系结构的JRE包。但是,Oracle JRE在某些Linux发行版上存在AWT功能方面的问题,而为发行版编译的OpenJDK版本则没有。另外,一般来说,无法通过shell脚本确定32位JRE是否可以工作。实际上,这取决于您所讨论的问题。AWT中的全屏模式在Oracle Java和OpenJDK中都被打破(我未能将一些工作的NEWT代码移植到AWT),它们共享了97%以上的源代码,在字体、声音和编解码器方面只有细微的差异。您可以使用“less/proc/cpuinfo”或“lscpu”来获得Linux下的体系结构。如果要使用跨平台API,请查看libcpuid。LWJGL3支持一个更好的解决方案,但我忘记了它的名字:Sunz幸运的是,这不是找到CPU架构的问题。有时,在某些64位Linux发行版中,32位库的安装是不完整的,没有好的方法从shell脚本中检测到这一点。