LWJGL';java.lang.UnsatifiedLinkError';:java.library.path中没有lwjgl 线程“main”java.lang.UnsatisfiedLinkError中出现异常:java.libr中没有lwjgl 小径 位于java.lang.ClassLoader.loadLibrary(未知源) 位于java.lang.Runtime.loadLibrary0(未知源) 位于java.lang.System.loadLibrary(未知源) 位于org.lwjgl.Sys$1.run(Sys.java:73) 位于java.security.AccessController.doPrivileged(本机方法) 位于org.lwjgl.Sys.doLoadLibrary(Sys.java:66) 位于org.lwjgl.Sys.loadLibrary(Sys.java:95) 位于org.lwjgl.Sys(Sys.java:112) 在org.lwjgl.opengl.Display上(Display.java:135) 在org.lorana.client.lorana.(lorana.java:20) 位于org.lorana.client.lorana.main(lorana.java:31)
在我将所有本机库链接到每个引用的库并遵循 我还关注了董事会上关于lwjgl未满足链接错误的其他问题,但没有结果 非常感谢您的帮助,LWJGL';java.lang.UnsatifiedLinkError';:java.library.path中没有lwjgl 线程“main”java.lang.UnsatisfiedLinkError中出现异常:java.libr中没有lwjgl 小径 位于java.lang.ClassLoader.loadLibrary(未知源) 位于java.lang.Runtime.loadLibrary0(未知源) 位于java.lang.System.loadLibrary(未知源) 位于org.lwjgl.Sys$1.run(Sys.java:73) 位于java.security.AccessController.doPrivileged(本机方法) 位于org.lwjgl.Sys.doLoadLibrary(Sys.java:66) 位于org.lwjgl.Sys.loadLibrary(Sys.java:95) 位于org.lwjgl.Sys(Sys.java:112) 在org.lwjgl.opengl.Display上(Display.java:135) 在org.lorana.client.lorana.(lorana.java:20) 位于org.lorana.client.lorana.main(lorana.java:31),java,lwjgl,unsatisfiedlinkerror,Java,Lwjgl,Unsatisfiedlinkerror,在我将所有本机库链接到每个引用的库并遵循 我还关注了董事会上关于lwjgl未满足链接错误的其他问题,但没有结果 非常感谢您的帮助, 提前谢谢 LWJGL使用自己的变量作为本机库的路径: Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.libr ary.path at java.lang.ClassLoader.loadLibrary(Unknown Source)
提前谢谢 LWJGL使用自己的变量作为本机库的路径:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.libr
ary.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at org.lwjgl.Sys$1.run(Sys.java:73)
at java.security.AccessController.doPrivileged(Native Method)
at org.lwjgl.Sys.doLoadLibrary(Sys.java:66)
at org.lwjgl.Sys.loadLibrary(Sys.java:95)
at org.lwjgl.Sys.<clinit>(Sys.java:112)
at org.lwjgl.opengl.Display.<clinit>(Display.java:135)
at org.lorana.client.Lorana.<init>(Lorana.java:20)
at org.lorana.client.Lorana.main(Lorana.java:31)
如果保留LWJGL包中的文件结构,则可以使用如下内容:
System.setProperty("org.lwjgl.librarypath", new File("pathToNatives").getAbsolutePath());
我不确定如何让它在Eclipse中工作,但我在尝试构建可执行JAR时遇到了类似的问题 下面的所有解决方案都假设您在同一目录中的JAR文件旁边有本机库,或者将本机库作为嵌入式资源捆绑到JAR中 作为@Dawnkeeper,您可以简单地使用“org.lwjgl.librarypath”系统属性来指示lwjgl在哪里找到本机库 或 正如您的错误所示,LWJGL检查更常见的“java.library.path”系统属性以定位本机库。当您像这样运行JAR时,可以在命令行中设置:
switch(LWJGLUtil.getPlatform())
{
case LWJGLUtil.PLATFORM_WINDOWS:
{
JGLLib = new File("./native/windows/");
}
break;
case LWJGLUtil.PLATFORM_LINUX:
{
JGLLib = new File("./native/linux/");
}
break;
case LWJGLUtil.PLATFORM_MACOSX:
{
JGLLib = new File("./native/macosx/");
}
break;
}
System.setProperty("org.lwjgl.librarypath", JGLLib.getAbsolutePath());
正如我上面提到的,我想要一个独立的可执行JAR;我不希望用户必须使用命令行参数运行JAR文件。我试图在我的main
方法中设置此系统属性,但很快发现了这一点。相反,我最终编写了以下代码(使用上面链接的变通方法)在我的main
方法中设置“java.library.path”:
java -Djava.library.path=./lib -jar myApplication.jar
代码引用:此错误意味着JVM找不到本机库
lwjgl.dll
,因此必须配置错误。如果没有关于项目具体如何配置的更多信息,很难给出更有用的答案。我是否需要将本机与主runnable jar放在一个子文件夹中?必须将属性设置为本机LIB的完整路径。他们在哪里并不重要,只要道路合适。第二个代码段是为一个结构构建的,其中lib位于主jar旁边的路径中,它们仍然使用LWJGL包中的子文件夹。非常感谢!我通过使用setProperty方法将其定向到/natives/windows使其工作,该方法在导出的jar所在的同一目录中查找该文件。
public static void main(String[] args) {
addLwjglNativesToJavaLibraryPathProperty();
// run code dependent on LWJGL here...
}
private static void addLwjglNativesToJavaLibraryPathProperty() {
String osDir;
if (SystemUtils.IS_OS_WINDOWS) {
osDir = "windows";
} else if (SystemUtils.IS_OS_LINUX) {
osDir = "linux";
} else if (SystemUtils.IS_OS_MAC_OSX) {
osDir = "macosx";
} else if (SystemUtils.IS_OS_SOLARIS) {
osDir = "solaris";
} else {
throw new RuntimeException("Unsupported OS: " + System.getProperty("os.name"));
}
addPathToJavaLibraryPathProperty("lib/natives/" + osDir);
}
// https://stackoverflow.com/q/5419039
private static void addPathToJavaLibraryPathProperty(String propertyValue) {
String propertyName = "java.library.path";
try {
Field field = ClassLoader.class.getDeclaredField("usr_paths");
field.setAccessible(true);
String[] paths = (String[]) field.get(null);
for (String path : paths) {
if (propertyValue.equals(path)) return;
}
String[] tmp = new String[paths.length + 1];
System.arraycopy(paths, 0, tmp, 0, paths.length);
tmp[paths.length] = propertyValue;
field.set(null, tmp);
System.setProperty(propertyName, System.getProperty(propertyName) + File.pathSeparator + propertyValue);
} catch (IllegalAccessException e) {
throw new RuntimeException("Failed to get permissions to set " + propertyName);
} catch (NoSuchFieldException e) {
throw new RuntimeException("Failed to get field handle to set " + propertyName);
}
}