從我的previous question中,我知道RedHat 5.8不支持JavaFX,即使在我的Linux上安裝了Java 8(jdk1.8.0_05)時,在win7中創建的JAR文件也可以'通過java -jar helloworld.jar
執行。這是否意味着沒有辦法在這臺機器上運行JavaFX jars?在Redhat 5上運行JavaFX應用程序
回答
在RHEL5上運行JavaFX應用程序的問題是該操作系統附帶的glib版本不夠新。訣竅是提供該庫的更新版本以及依賴於JRE的所有其他庫。下一個障礙是RHEL5共享庫加載器不會加載這些庫。你必須使用兼容的加載器。但是JVM具有在可執行文件中硬編碼的加載器的路徑!因此,你需要在修補一個自定義的加載路徑不同的JVM粗略地說,步驟獲得這個工作是...
拆開從RHEL以下軟件包:
- glib2
- libffi
- 的glibc
- glibc的共用
- ZLIB
- GTK2
- 攀高
- 開羅
- pixman
把所有的共享庫的那些包在目錄中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應用程序。話雖如此,我強烈建議只要升級您的操作系統,如果它是遠程可行的。
非常感謝你的回答,你是一個天才。這個技巧沒有記錄在其他地方我能找到。希望你不介意,但也回答更具體的可重複的細節。我也需要libXcomposite,可能是因爲使用棱鏡軟件渲染。 – Adam
注意這是建立在詹姆斯現有的答案有更具體的細節
從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
可以從這些RPM如果有必要[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應用程序...
./jdk1.8.0_40/bin/java -cp etc...
Happy days
- 1. iOS 5 MapKit,MKPlacemark,在iOS 5上運行iOS 4.3應用程序
- 2. 運行JavaFX應用程序:JFXPanel vs Application.launch
- 3. 爲ARM運行JavaFX應用程序
- 4. 從JavaFX應用程序運行dll
- 5. 運行JavaFX應用程序的要求
- 6. 在本地運行openshift redhat平均堆棧應用程序?
- 7. 在Java 1.7u80上運行JavaFX應用程序的問題
- 8. JavaFX應用程序可以在手機上運行嗎?
- 9. 在NetBeans上運行JavaFX應用程序時,「URI不分層」
- 10. 應用程序不是在模擬器上運行的iOS 5
- 11. 如何在ios 5設備上運行註銷應用程序
- 12. iPhone 5應用程序如何在舊iPhone上運行?
- 13. 將應用程序設置爲在iPhone 5+上運行
- 14. JavaFX/Netbeans程序未運行
- 15. ColdFusion 2016:無法在RedHat上安裝修補程序5
- 16. 使用Eclipse IDE在瀏覽器中運行JavaFx應用程序
- 17. 在Mac OS上的JavaFX應用程序
- 18. 在Mac上從命令行運行ASP.NET 5應用程序時使用launchSettings.json?
- 19. 在IOS 5.1上運行應用程序?
- 20. 在pygtk應用程序上運行raw_input
- 21. 在Apache上運行Ruby應用程序
- 22. 運行在WCF上的應用程序
- 23. 在android上運行j2me應用程序?
- 24. 在Android上運行python應用程序
- 25. 在Azure上運行Node.js應用程序
- 26. 在VPS上運行.net應用程序
- 27. 在UNIX上運行Web應用程序
- 28. 在Tomcat上運行應用程序5.5
- 29. 在app上運行NodeJS應用程序
- 30. 在Heroku上運行Flask應用程序
你唯一的改變就是在這臺機器上安裝OpenJDK:'yum install java-1.8.0 -openjdk-devel'.then,if y你不能,你將不得不升級系統。 – Mansueli