Собственная библиотека, необходимая для Java OpenAL

Я пытаюсь использовать библиотеку Java OpenAL. У меня проблема с импортом нативной библиотеки libsoft_oal.so. Java OpenAL зависит от программной реализации OpenAL. Я попытался собрать его в соответствии с их readme на github, и похоже, что только библиотека libopenal.so скомпилирована. Java OpenAL не обновлялся в течение 4 лет, поэтому мне показалось, что библиотека была просто переименована. Я переименовал библиотеку, но безуспешно. Я думаю, что мой путь к библиотеке правильный, и я попытался запустить jvm с параметром java.library.path, но безуспешно. Вот трассировка стека:

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);
    }
}

Есть ли способ решить эту проблему без непосредственного изменения библиотеки? Спасибо

1 ответ

Решение

Я отредактировал библиотеку, и теперь все работает нормально. Я также создал запрос на загрузку на GitHub.

Другие вопросы по тегам