2015-10-14 75 views
1

我是linux新手。我正嘗試在Ubuntu中使用Java加載SO文件。我在java方法「System.load(/home/ab/Downloads/libtesseract.so)」中指定的文件加載正常,但它的依賴文件放在與「libtesseract.so」相同的位置。這是我得到的錯誤消息。錯誤:UnSatisfiedLinkError並說「liblept.so.4」找不到。這個文件和libtesseract.so放在同一個位置。當我將「liblept.so.4」放在「/ lib」中時。它可以從這裏加載這個文件。所以我明白的是,它不適合Java加載依賴。它必須由Ubuntu加載。所以我嘗試了一個簡單的應用程序來加載這個通過設置PATH變量與所在文件的位置。並將java代碼導出到jar中,並嘗試從終端運行此jar文件,因爲路徑變量對於整個系統不是持久的。它運行良好。所以我試圖通過使用下面的代碼以編程方式執行相同的事情,以使其不起作用。請指教。 TIA無法在LInux中加載相關SO文件

代碼:

ProcessBuilder pb = new ProcessBuilder("/bin/sh"); 
    Map<String, String> envMap = pb.environment(); 
    envMap.put("LD_LIBRARY_PATH", "/home/ab/Downloads"); 
    envMap.put("PATH", "/home/ab/Downloads"); 
    Set<String> keys = envMap.keySet(); 
    for(String key:keys) 
    { 
     System.out.println(key+" ==> "+envMap.get(key)); 
    } 
    System.load("/home/ab/Downloads/libtesseract.so"); 
+0

「所以我的理解是,它不適合Java加載相關的,它必須由Ubuntu加載。」 - 不,我相信這是JVM的工作。 –

+0

感謝您的評論Damien ...爲什麼我說這是因爲我使用Java代碼加載的第一個或主要的SO加載正常,但是當這個主SO尋找其他從屬所以,它失敗時,其他依賴所以存在相同的位置。 – user578219

回答

2

據我知道你真的不能修改環境變量在Java中「上即時」。這意味着您應該在運行java之前設置LD_LIBRARY_PATH和PATH。

+0

你不能在代碼中設置它。您應該在運行程序之前更改環境 –

+1

嗨,對不起,我刪除了我以前的評論。我明白了你的觀點。但這是不可能的,因爲我在我的jar中捆綁了這些So文件,我在飛行中解鎖並需要使用這些文件。 – user578219

+0

軟鏈接到解綁後路徑中的文件夾? –