我正在使用Java Web Start啓動依賴某些第三方本機庫的Java應用程序。這些本地庫隨後使用LoadLibrary/dlopen加載另一個本地庫(commonLib
)作爲它們的依賴項。Java Web Start - 使用另一個本地依賴項加載本地依賴項
當不使用Web Start時,當本地庫位於同一目錄中時,一切都按預期工作。
Web Start的,但是,需要本機庫被裝在一個jar文件,並在JNLP文件中引用的,我做到了:
<!-- Windows OS -->
<resources os="Windows">
<nativelib href="native/native-windows.jar" />
</resource>
<!-- Linux OS -->
<resources os="Linux">
<nativelib href="native/native-linux.jar" />
</resources>
<!-- Mac OSX -->
<resources os="Mac OS X">
<nativelib href="native/native-osx.jar"/>
</resources>
本機庫加載罰款,但他們無法加載的依賴commonLib
- C++ LoadLibrary/dlopen調用失敗,因爲該文件存在於當前庫搜索路徑中的某個jar/cache文件夾中。
在Windows上,我能夠在Java中嘗試加載JNI庫,像這樣通過前預加載commonLib
解決這個問題:
System.loadLibrary("commonLib");
System.loadLibrary("myNativeLib");
然而,這種方法並沒有在OS X上運行 - 本地代碼中的dlopen失敗。 dlopen顯然不夠聰明,如果它已經加載,不會嘗試再次加載庫。
是否有跨平臺的方式來打包和加載依賴於Java Web Start中其他本機庫的本機庫?
罐子是否包含所有涉及的土着? –
是的,雙重檢查。 –