我正在使用JNA和Java,但我認爲這個問題會影響任何本地到外部的橋。搜索路徑,其中一個本地庫依賴於另一個本地庫
我有一個依賴於lib1.dylib的Java應用程序,而lib1.dylib依賴於lib2.dylib。
我想把我的.app文件放在Mac裏面。我可以很容易地將lib1.dylib放在裏面,並設置java.classpath(或NativeLibrary.addSearchPath())來告訴JVM在哪裏找到lib1.dylib。麻煩的是,我不知道如何通知lib1.dylib的依賴關係也在我提供的位置。結果是lib1加載正常,但是因爲lib2不在操作系統的庫路徑中,所以找不到lib2。
任何人都知道我能克服這個問題嗎?我認爲它必須在大量共享庫的大型項目中大量出現。
謝謝!我會檢查出來的。對不起,我的問題中混淆了classpath和java庫路徑。 (1)或(2)可能值得丟失便攜性。我試圖避免(3),因爲它使安裝程序非常複雜,需要root訪問權限,覆蓋其他應用程序需要的現有舊版本庫的風險等。 - - – 2010-03-24 23:04:13
調查完這些選項之後,只有壞消息。 (1)不適用於JNA。顯然,JNA並不關心Java是否曾經加載過這個庫,大概是因爲它必須自己做映射的東西。但它會與JNI一起工作。(2)需要針對不同操作系統的特殊代碼,但最大的問題是,在UNIX中沒有與dllmain等價的東西,並且沒有特別的保證(我知道)在依賴查找完成之前將執行cwd開關。 我看不出(3),我試圖避免這個問題。遊民。 – 2010-03-25 03:34:31