2017-10-18 83 views
1

我正在編寫一個使用JNI創建Java虛擬機並在其上運行一些代碼的本機應用程序。此應用程序旨在分發給其他人使用,所以它需要在其他計算機上工作,而不僅僅是我的。這一切在PC上運行良好,但在Mac上,存在各種各樣的問題。OSX - 編譯Java JNI應用程序以僅安裝JRE運行

如果我使用內置在Xcode中的Java框架,然後我可以使用JNI提供了我所有的代碼被編譯成Java版本6 - 因爲Xcode的Java框架,顯然在的Java 6

我能結束的支持如果我安裝JDK並巧妙鏈接到libjvm.dlib,libjli.dylib和libjava.dylib文件,請使用更高版本的Java。在這種情況下一切都很順利,這非常酷。所以我試圖在另一臺沒有安裝JDK的Mac上運行這個,只是JRE,而我發現它不起作用!即使jre/lib/server/libjvm.dylib存在於JDK中,但事實證明它在JRE中不存在。

我的問題是:有沒有什麼辦法可以創建一個Java 8或Java 9虛擬機,可以在只安裝了JRE的Mac OSX上運行,而不是JDK?

+0

嘗試通過'dlopen'加載'jre/lib/server/libjvm.dylib'並調用這些函數。我和你有同樣的問題,並沒有找到解決辦法。到目前爲止,我動態鏈接,並在我自己的比賽中正常工作。我使用'getenv(「JAVA_HOME」)'來查找JRE。 「 – Brandon

+0

」它不起作用!「 - 我們需要繼續努力。它究竟如何失敗?我的第一個猜測是你沒有正確設置dylib的'@ executable_path',但這只是一個預感。 – Ssswift

+0

嗨布蘭登,這是一個很好的解決方案,但我的主要問題是,如果僅安裝Java運行時環境而不是Java開發工具包,jre/lib/server/libjvm.dylib似乎不存在。有什麼辦法可以讓這個只與JRE一起工作? – SynthDan

回答

-1

嗯...我不完全確定我明白你的要求,但我會根據問題對我的看法來回答。我必須問,你確定你把Java程序正確地打包到.jar文件中了嗎?如果這不是問題,我會說我通常知道你可以用Java來捆綁庫和其他包。我不老實地知道這是否會成爲您的選擇,因爲我不知道您提到的那些文件,但這可能是您可能的解決方案。

對不起,我不能提供更多的信息。希望別人會更熟悉Java的這個特定部分。

相關問題