2012-04-20 107 views
0

嗨我有一個Java程序,它必須調用一個本地程序,並且這個本地程序由兩個如此的文件給出。所以我創建我的文件以便使用這個本地程序API來爲我的Java程序做些事情。我試圖將兩個這樣的文件與我創建的文件合併爲一個文件,然後運行我的java程序。但是,它似乎失敗了。更具體一點,這是我的例子。構建多個共享庫

我有一個Java程序A,它必須調用一些本地代碼。因此我編寫了一些本地代碼並將其構建爲共享庫(稱爲:C.so)。

不幸的是,我寫的本地代碼必須使用其他文件中的其他代碼。 (A.so,B.so)

因此,任何想法如何編譯與A.so和B.so這樣的文件,以使我的Java程序工作?

回答

0

我假設如下:

  • 當您鏈接c.so,你a.so上市b.so在命令行上。
  • 當您在c.so上運行ldd時,您會看到a.so和b.so.
  • 運行時,您將-Djava.library.path設置爲包含所有三個目錄。
  • 運行時,不會將LD_LIBRARY_PATH設置爲包含包含全部三個目錄的目錄。

如果將LD_LIBRARY_PATH環境變量設置爲包含庫中的目錄,您將獲得所需的結果。

有關更多說明和替代方法,請參閱https://github.com/bimargulies/jni-origin-testbed

+0

是的,Idd給了我a.so和b.so,並且我確實設置了LD_LIBRARY_PATH以包含所有3個庫。我仍然得到不滿意的錯誤,我不明白爲什麼... – user1197891 2012-04-20 12:33:57

+0

您的下一個端口是LD_DEBUG環境變量。 – bmargulies 2012-04-20 13:34:43

+0

請修改您的問題以包含異常錯誤消息的全文。您確實將LD_LIBRARY_PATH設置爲包含文件的*目錄*,而不是單個文件路徑名,對嗎? – bmargulies 2012-04-20 13:35:31