2013-01-12 95 views
1

我正在使用mediainfo庫的java項目。 在窗戶midiainfo.dll我JNA代碼工作正常,但是當我在Linux它不工作我的代碼運行,並給予下列異常 -無法在linux中加載庫MediaInfo

java.lang.UnsatisfiedLinkError: Unable to load library 'MediaInfo': libMediaInfo.so: cannot open shared object file: No such file or directory 

我寫這樣我的java的代碼 -

interface MediaInfoDLL_Internal extends Library 
{ 

    MediaInfoDLL_Internal INSTANCE = (MediaInfoDLL_Internal) Native.loadLibrary("MediaInfo", MediaInfoDLL_Internal.class, singletonMap(OPTION_FUNCTION_MAPPER, new FunctionMapper() 
     { 

      public String getFunctionName(NativeLibrary lib, Method method) 
      { 
       // MediaInfo_New(), MediaInfo_Open() ... 
       return "MediaInfo_" + method.getName(); 
      } 
     } 
    )); 


    //Constructor/Destructor 
    Pointer New(); 
    void Delete(Pointer Handle); 

    //File 
    int Open(Pointer Handle, WString file); 
    void Close(Pointer Handle); 

    //Infos 
    WString Inform(Pointer Handle); 
    WString Get(Pointer Handle, int StreamKind, int StreamNumber, WString parameter, int infoKind, int searchKind); 
    WString GetI(Pointer Handle, int StreamKind, int StreamNumber, int parameterIndex, int infoKind); 
    int  Count_Get(Pointer Handle, int StreamKind, int StreamNumber); 

    //Options 
    WString Option(Pointer Handle, WString option, WString value); 
} 

只是在類路徑中添加mediainfo.dll,這工作就像魔術一樣,但在linux中我試圖添加libmediainfo.so.0,libmediainfo.so.0.0.0,libzen.so.0和libzen.so。 0.0.0但沒有運氣...

有沒有人知道如何運行mediainfo + java在Linux中?

我使用Java 6,CentOS 5.6 final和最新的mediainfo版本。

回答

1

我通過使符號鏈接

我用下面從超級用戶命令解決我的問題

$ sudo的LN -s /usr/lib/libmediainfo.so.0 /usr/lib/libMediaInfo.so
$ sudo的LN -s /usr/lib/libzen.so.0 /usr/lib/libzen.so

1

在* nix文件名是大小寫敏感的,所以如果你的庫稱爲libmediainfo.so,你需要改變

Native.loadLibrary("MediaInfo",.... 

1

1)確保文件實際上是所謂的 「libMediaInfo.so」(區分大小寫)!;它可以是一個指向實際版本的符號鏈接,很多libs都是這樣設置的。 2)確保該文件位於* nix上的LD_LIBRARY_PATH中3)在代碼中將其設置爲小寫可能會使其更清潔一些,但這是一個風格問題 - 重要的是代碼中的lib名稱必須對應於文件名該系統包括案例