从我的previous question,我知道RedHat 5.8中不支持JavaFX,这意味着,即使我在Linux上安装了Java 8(jdk1.8.0_05),在win7中创建的JAR文件也可以使用。通过java -jar helloworld.jar
执行。这是否意味着没有办法在这台机器上运行JavaFX jar?
答案 0 :(得分:2)
在RHEL5上运行JavaFX应用程序的问题是附带的glib版本,操作系统不够新。那么,诀窍是提供该库的更新版本以及依赖于它的所有其他库到JRE。下一个障碍是RHEL5共享库加载器不会加载这些库。您必须使用兼容的加载程序。但是JVM具有可执行文件中硬编码的加载器的路径!所以你需要一个单独的JVM,并修补了一个自定义加载器路径。粗略地说,实现这个工作的步骤是......
从RHEL 6 :
中解压缩以下软件包将这些包中的所有共享库放在RHEL5系统的目录中。我们称之为/YOUR-ALIEN-RHEL6-LIBS-PATH
。
将JRE的另一个副本打包到/YOUR-ALIEN-JVM-PATH
。
使用patchelf将JVM可执行文件指向新加载程序。
./usr/bin/patchelf --set-interpreter /YOUR-ALIEN-RHEL6-LIBS-PATH/lib/amd64/ld-linux-x86-64.so.2 /YOUR-ALIEN-JVM-PATH/jre1.8.0_25/bin/java
设置LD_LIBRARY_PATH=/YOUR-ALIEN-RHEL6-LIBS-PATH/lib/amd64:/YOUR-ALIEN-RHEL6-LIBS-PATH/lib/amd64/jli
虽然它不漂亮,但我已经使用这种方法在RHEL5上成功运行了JavaFX应用程序。话虽如此,我强烈建议您升级操作系统,如果它甚至可行的话。
答案 1 :(得分:1)
请注意,这建立在詹姆斯现有答案的基础上,具体细节
从RedHat 6.x获得RPM,例如http://vault.centos.org/6.2/os/i386/Packages。复制到目录rpms/
cairo-1.8.8-3.1.el6.i686.rpm
glib2-2.22.5-6.el6.i686.rpm
glibc-2.12-1.47.el6.i686.rpm
glibc-common-2.12-1.47.el6.i686.rpm
gtk2-2.18.9-6.el6.centos.i686.rpm
libffi-3.0.5-3.2.el6.i686.rpm
libXcomposite-0.4.1-2.el6.i686.rpm <== not mentioned in other answer
pango-1.28.1-3.el6_0.centos.5.i686.rpm
pixman-0.18.4-1.el6_0.1.i686.rpm
zlib-1.2.3-27.el6.i686.rpm
libXdamage-1.1.2-1.el6.i686.rpm <== not mentioned in other answer
将RPM中的所有内容解压缩到单独的目录中。使用rpm2cpio
和xzcat
。如有必要,xzcat
[xz, xz-libs, xz-lzma-compat]
mkdir redhat-6u2-libs
cd redhat-6u2-libs/
ls -1 rpms/* | xargs -i{} bash -c "rpm2cpio {} | xzcat | cpio -idmv"
获取patchelf
的副本。我是从源码构建的,因为无法找到Redhat 5 RPM。只需要相关的RPM [gcc, gcc-c++, glibc-devel, kernel-headers, libstdc++-devel]
wget https://nixos.org/releases/patchelf/patchelf-0.9/patchelf-0.9.tar.bz2
tar xjf patchelf-0.9.tar.bz2
cd patchelf-0.9
./configure --prefix /tmp/patchelf
make install
使用patchelf
设置redhat 6u2加载程序(也称为解释程序)的位置
/tmp/patchelf/bin/patchelf --set-interpreter ~/redhat-6u2-libs/lib/ld-linux.so.2 jdk1.8.0_40/bin/java
设置LD_LIBRARY_PATH
,这需要同时包含/usr/lib
和/lib
,否则会出现段错误。
export LD_LIBRARY_PATH=/home/user/redhat-6u2-libs/usr/lib:/home/user/redhat-6u2-libs/lib
(请注意,设置LD_LIBRARY_PATH
之后运行的任何其他应用程序除了已经更正其解释程序位置的java之外的其他应用程序将会出现段错误。)
现在运行java app ...
./jdk1.8.0_40/bin/java -cp etc...
快乐的日子