2013-10-02 32 views
0

我有一個C項目。我將它編譯爲一個庫(.so),並使用JNI將它導入到一個java項目中。一切進行得都很順利。但是我想將它編譯成.jar文件,這樣我就可以分發它,用戶不必創建實現C函數的Java類(使用JNI)。所以我試圖做到這一點,但是當我嘗試再次編譯時(在一個乾淨的項目中,包含類和.so的.jar),類(從jar中)再也找不到.so了,符號不被識別。我不希望用戶手動鏈接.so到jar(在Eclipse或其他)。.so .jar(Eclipse)

我對java或eclipse沒有太多的經驗,所以我很迷茫。

有沒有人有答案或什麼來幫助我?

+0

你會遇到一個問題,就是你將該應用程序分發給了除linux以外的其他應用程序。順便說一句,System.loadLibrary不適用於內部的jar庫 – RamonBoza

回答

1

大多數操作系統上的動態鏈接程序不會從壓縮歸檔中加載庫;您必須將.so解壓縮到一個文件以加載它,例如在臨時文件的目錄中。

之後,你將不得不使用System.load加載。所以,因爲它不會在庫搜索路徑。

這個麻煩的另一種方法是使用分配JNLP應用程序:網絡啓動應用程序會下載,安裝和運行應用程序,你不擔心自己提取任何東西。本地圖書館添加了nativelib元素。 http://docs.oracle.com/javase/7/docs/technotes/guides/javaws/developersguide/syntax.html