2015-11-13 80 views
0

我正在嘗試使用Java OpenAL庫。導入本地庫libsoft_oal.so時遇到問題。 Java OpenAL依賴於OpenAL軟實現。我試圖根據他們在github上的自述文件來構建它,似乎只編譯了libopenal.so庫。 Java OpenAL沒有更新4年,所以在我看來,庫只是重新命名。我改名爲圖書館,但沒有運氣。我認爲我的庫路徑是正確的,我試圖用java.library.path參數運行jvm,但沒有運氣。 這裏是堆棧跟蹤:本地庫,Java需要OpenAL

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'soft_oal': libsoft_oal.so: cannot open shared object file: No such file or directory 
    at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:169) 
    at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:242) 
    at com.sun.jna.Library$Handler.<init>(Library.java:140) 
    at com.sun.jna.Native.loadLibrary(Native.java:368) 
    at com.sun.jna.Native.loadLibrary(Native.java:353) 
    at org.urish.openal.jna.ALFactory.<init>(ALFactory.java:16) 
    at org.urish.openal.OpenAL.<init>(OpenAL.java:24) 
    at defaultpackage.SoundTest.<init>(SoundTest.java:22) 
    at defaultpackage.SoundTest.main(SoundTest.java:17) 
:run FAILED 

FAILURE: Build failed with an exception. 

當我加載具有的System.loadLibrary( 「soft_oal」)的文庫; everythinkg按預期工作。 這是在庫中的問題部分:

public class ALFactory { 
    private static final String DEFAULT_DLL_NAME = "soft_oal"; 

    public final AL al; 
    public final ALC alc; 
    public final ALExt alext; 

    public ALFactory() { 
     al = (AL) Native.loadLibrary(DEFAULT_DLL_NAME, AL.class); 
     alc = (ALC) Native.loadLibrary(DEFAULT_DLL_NAME, ALC.class); 
     alext = (ALExt) Native.loadLibrary(DEFAULT_DLL_NAME, ALExt.class); 
    } 

    public ALFactory(File dllPath) throws FileNotFoundException { 
     String dllName = DEFAULT_DLL_NAME; 
     if (dllPath != null) { 
      if (!dllPath.exists()) { 
       throw new FileNotFoundException(dllPath.getAbsolutePath()); 
      } 
      System.setProperty("jna.library.path", dllPath.getParent()); 
      dllName = dllPath.getName(); 
     } 

     al = (AL) Native.loadLibrary(dllName, AL.class); 
     alc = (ALC) Native.loadLibrary(dllName, ALC.class); 
     alext = (ALExt) Native.loadLibrary(dllName, ALExt.class); 
    } 
} 

有沒有辦法解決這個問題,而不直接修改庫的方法嗎?謝謝

回答

0

我編輯過圖書館,現在一切正常。我也在GitHub上創建了一個pull請求。