本机库,Java OpenAL 需要
Native library, required by Java OpenAL
我正在尝试使用 Java OpenAL 库。我在导入名为 libsoft_oal.so 的本机库时遇到问题。 Java OpenAL 依赖于 OpenAL 软件实现。我试图根据他们在 github 上的自述文件构建它,但似乎只编译了 libopenal.so 库。 Java OpenAL 已经 4 年没有更新了,所以在我看来,这个库只是简单地重命名了。我重命名了图书馆但没有运气。我认为我的库路径是正确的,我尝试使用 java.library.path 参数 运行 jvm 但没有成功。
这是堆栈跟踪:
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);
}
}
有没有办法不用直接修改库就可以解决这个问题?谢谢
我已经编辑了库,现在一切正常。我还在 GitHub.
上创建了一个拉取请求
我正在尝试使用 Java OpenAL 库。我在导入名为 libsoft_oal.so 的本机库时遇到问题。 Java OpenAL 依赖于 OpenAL 软件实现。我试图根据他们在 github 上的自述文件构建它,但似乎只编译了 libopenal.so 库。 Java OpenAL 已经 4 年没有更新了,所以在我看来,这个库只是简单地重命名了。我重命名了图书馆但没有运气。我认为我的库路径是正确的,我尝试使用 java.library.path 参数 运行 jvm 但没有成功。 这是堆栈跟踪:
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);
}
}
有没有办法不用直接修改库就可以解决这个问题?谢谢
我已经编辑了库,现在一切正常。我还在 GitHub.
上创建了一个拉取请求