在Redhat 5上运行JavaFX应用程序

在Redhat 5上运行JavaFX应用程序,javafx,javafx-8,Javafx,Javafx 8,从我的经验来看,我知道Redhat5.8不支持JavaFX,这意味着即使我在Linux上安装了Java8(jdk1.8.0_05),在win7中创建的JAR文件也无法通过Java-JAR helloworld.JAR执行。这是否意味着无法在此计算机上运行JavaFX JAR?在RHEL5上运行JavaFX应用程序的问题是,随操作系统附带的glib版本不够新。因此,诀窍是向JRE提供该库和所有依赖它的其他库的更新版本。下一个障碍是RHEL5共享库加载器不会加载这些库。您必须使用兼容的加载程序。但是

从我的经验来看,我知道Redhat5.8不支持JavaFX,这意味着即使我在Linux上安装了Java8(jdk1.8.0_05),在win7中创建的JAR文件也无法通过
Java-JAR helloworld.JAR
执行。这是否意味着无法在此计算机上运行JavaFX JAR?

在RHEL5上运行JavaFX应用程序的问题是,随操作系统附带的glib版本不够新。因此,诀窍是向JRE提供该库和所有依赖它的其他库的更新版本。下一个障碍是RHEL5共享库加载器不会加载这些库。您必须使用兼容的加载程序。但是JVM有到加载程序的路径在可执行文件中硬编码!因此,您需要一个单独的JVM,并在其中修补自定义加载程序路径。大致来说,让它工作的步骤是

  • 从RHEL6打开以下包装:

    • 油嘴滑舌
    • 利菲
    • 格利伯
    • 通用glibc
    • 兹利布
    • gtk2
    • 盘古
    • 开罗
    • 皮克斯曼
  • 将这些包中的所有共享库放在RHEL5系统的一个目录中。让我们称之为
    /YOUR-ALIEN-RHEL6-LIBS-PATH

  • 将JRE的另一个副本解压缩到,例如,
    /YOUR-ALIEN-JVM-PATH

  • 用于将JVM可执行文件指向新加载程序

    • /usr/bin/patchelf--set解释器/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应用程序。话虽如此,我强烈建议升级你的操作系统,如果它是远程可行的。

    注意,这是基于James的现有答案,并提供了更具体的细节

    从RedHat 6.x获取RPM,例如。复制到目录
    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
    
    获取
    patchelf
    的副本。我从源代码构建,因为找不到Redhat 5 RPM。只需要依赖的RPM
    [gcc,gcc-c++,glibc-devel,内核头,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加载程序(又名解释器)的位置

    设置
    LD\u LIBRARY\u路径
    ,这需要同时具有
    /usr/lib
    /lib
    ,否则会出现segfault

    export LD_LIBRARY_PATH=/home/user/redhat-6u2-libs/usr/lib:/home/user/redhat-6u2-libs/lib
    
    (请注意,在设置了
    LD\u LIBRARY\u PATH
    之后运行的任何其他应用程序,都不是已更正解释器位置的java。

    现在运行java应用程序

    ./jdk1.8.0_40/bin/java -cp  etc...
    

    快乐时光

    您唯一的改变就是在这台机器上安装OpenJDK:
    yum install java-1.8.0-OpenJDK-devel
    。如果您不能,您将不得不升级系统。非常感谢您的回答,您是个天才。这个把戏在我能找到的任何地方都没有记录。希望你不介意,但也回答了更具体,可重复的细节。在我的例子中,我还需要libXcomposite,可能是因为使用prism软件渲染。
    export LD_LIBRARY_PATH=/home/user/redhat-6u2-libs/usr/lib:/home/user/redhat-6u2-libs/lib
    
    ./jdk1.8.0_40/bin/java -cp  etc...