Skip to content

NativeLibraryLoader wrong libraries path #1965

@Ali-RS

Description

@Ali-RS
  • All the native libraries registered by default for lwjgl 2 and 3 in NativeLibraryLoader have the wrong path! (it still works for lwjgl2 and JInput because of this fallback because lwjgl2 and JInput natives are located in the root of the jar)

// LWJGL
registerNativeLibrary("lwjgl", Platform.Windows32, "native/windows/lwjgl.dll");
registerNativeLibrary("lwjgl", Platform.Windows64, "native/windows/lwjgl64.dll");
registerNativeLibrary("lwjgl", Platform.Linux32, "native/linux/liblwjgl.so");
registerNativeLibrary("lwjgl", Platform.Linux64, "native/linux/liblwjgl64.so");
registerNativeLibrary("lwjgl", Platform.MacOSX32, "native/macosx/liblwjgl.dylib");
registerNativeLibrary("lwjgl", Platform.MacOSX64, "native/macosx/liblwjgl.dylib");
// OpenAL
// For OSX: Need to add lib prefix when extracting
registerNativeLibrary("openal", Platform.Windows32, "native/windows/OpenAL32.dll");
registerNativeLibrary("openal", Platform.Windows64, "native/windows/OpenAL64.dll");
registerNativeLibrary("openal", Platform.Linux32, "native/linux/libopenal.so");
registerNativeLibrary("openal", Platform.Linux64, "native/linux/libopenal64.so");
registerNativeLibrary("openal", Platform.MacOSX32, "native/macosx/openal.dylib", "libopenal.dylib");
registerNativeLibrary("openal", Platform.MacOSX64, "native/macosx/openal.dylib", "libopenal.dylib");
// LWJGL 3.x
registerNativeLibrary("lwjgl3", Platform.Windows32, "native/windows/lwjgl32.dll");
registerNativeLibrary("lwjgl3", Platform.Windows64, "native/windows/lwjgl.dll");
registerNativeLibrary("lwjgl3", Platform.Linux32, "native/linux/liblwjgl32.so");
registerNativeLibrary("lwjgl3", Platform.Linux64, "native/linux/liblwjgl.so");
registerNativeLibrary("lwjgl3", Platform.MacOSX32, "native/macosx/liblwjgl.dylib");
registerNativeLibrary("lwjgl3", Platform.MacOSX64, "native/macosx/liblwjgl.dylib");
// GLFW for LWJGL 3.x
registerNativeLibrary("glfw-lwjgl3", Platform.Windows32, "native/windows/glfw32.dll");
registerNativeLibrary("glfw-lwjgl3", Platform.Windows64, "native/windows/glfw.dll");
registerNativeLibrary("glfw-lwjgl3", Platform.Linux32, "native/linux/libglfw32.so");
registerNativeLibrary("glfw-lwjgl3", Platform.Linux64, "native/linux/libglfw.so");
registerNativeLibrary("glfw-lwjgl3", Platform.MacOSX32, "native/macosx/libglfw.dylib");
registerNativeLibrary("glfw-lwjgl3", Platform.MacOSX64, "native/macosx/libglfw.dylib");
// jemalloc for LWJGL 3.x
registerNativeLibrary("jemalloc-lwjgl3", Platform.Windows32, "native/windows/jemalloc32.dll");
registerNativeLibrary("jemalloc-lwjgl3", Platform.Windows64, "native/windows/jemalloc.dll");
registerNativeLibrary("jemalloc-lwjgl3", Platform.Linux32, "native/linux/libjemalloc32.so");
registerNativeLibrary("jemalloc-lwjgl3", Platform.Linux64, "native/linux/libjemalloc.so");
registerNativeLibrary("jemalloc-lwjgl3", Platform.MacOSX32, "native/macosx/libjemalloc.dylib");
registerNativeLibrary("jemalloc-lwjgl3", Platform.MacOSX64, "native/macosx/libjemalloc.dylib");
// OpenAL for LWJGL 3.x
// For OSX: Need to add lib prefix when extracting
registerNativeLibrary("openal-lwjgl3", Platform.Windows32, "native/windows/OpenAL32.dll");
registerNativeLibrary("openal-lwjgl3", Platform.Windows64, "native/windows/OpenAL.dll");
registerNativeLibrary("openal-lwjgl3", Platform.Linux32, "native/linux/libopenal32.so");
registerNativeLibrary("openal-lwjgl3", Platform.Linux64, "native/linux/libopenal.so");
registerNativeLibrary("openal-lwjgl3", Platform.MacOSX32, "native/macosx/openal.dylib", "libopenal.dylib");
registerNativeLibrary("openal-lwjgl3", Platform.MacOSX64, "native/macosx/openal.dylib", "libopenal.dylib");
// BulletJme
registerNativeLibrary("bulletjme", Platform.Windows32, "native/windows/x86/bulletjme.dll");
registerNativeLibrary("bulletjme", Platform.Windows64, "native/windows/x86_64/bulletjme.dll");
registerNativeLibrary("bulletjme", Platform.Windows_ARM64, "native/windows/arm64/bulletjme.dll");
registerNativeLibrary("bulletjme", Platform.Linux32, "native/linux/x86/libbulletjme.so");
registerNativeLibrary("bulletjme", Platform.Linux64, "native/linux/x86_64/libbulletjme.so");
registerNativeLibrary("bulletjme", Platform.Linux_ARM32, "native/linux/arm32/libbulletjme.so");
registerNativeLibrary("bulletjme", Platform.Linux_ARM64, "native/linux/arm64/libbulletjme.so");
registerNativeLibrary("bulletjme", Platform.MacOSX32, "native/osx/x86/libbulletjme.dylib");
registerNativeLibrary("bulletjme", Platform.MacOSX64, "native/osx/x86_64/libbulletjme.dylib");
registerNativeLibrary("bulletjme", Platform.MacOSX_ARM64, "native/osx/arm64/libbulletjme.dylib");
// JInput
// For OSX: Need to rename extension jnilib -> dylib when extracting
registerNativeLibrary("jinput", Platform.Windows32, "native/windows/jinput-raw.dll");
registerNativeLibrary("jinput", Platform.Windows64, "native/windows/jinput-raw_64.dll");
registerNativeLibrary("jinput", Platform.Linux32, "native/windows/libjinput-linux.so");
registerNativeLibrary("jinput", Platform.Linux64, "native/windows/libjinput-linux64.so");
registerNativeLibrary("jinput", Platform.MacOSX32, "native/macosx/libjinput-osx.jnilib", "libjinput-osx.dylib");
registerNativeLibrary("jinput", Platform.MacOSX64, "native/macosx/libjinput-osx.jnilib", "libjinput-osx.dylib");
// JInput Auxiliary (only required on Windows)
registerNativeLibrary("jinput-dx8", Platform.Windows32, "native/windows/jinput-dx8.dll");
registerNativeLibrary("jinput-dx8", Platform.Windows64, "native/windows/jinput-dx8_64.dll");
registerNativeLibrary("jinput-dx8", Platform.Linux32, null);
registerNativeLibrary("jinput-dx8", Platform.Linux64, null);
registerNativeLibrary("jinput-dx8", Platform.MacOSX32, null);
registerNativeLibrary("jinput-dx8", Platform.MacOSX64, null);

  • NativeLibraryLoader is never used by jme3-lwjgl3. LWJGL 3 uses its own SharedLibraryLoader so we should remove lwjgl3 libraries from there as it is misleading. Also trying to load lwjgl3 libraries via NativeLibraryLoader won't work anyway and will produce an UnsatisfiedLinkError as it wouldn't find the libraries because of a wrong path.
SEVERE: Uncaught exception thrown in Thread[jME3 Main,5,main]
java.lang.UnsatisfiedLinkError: The required native library 'lwjgl' was not found in the classpath via 'native/linux/liblwjgl.so'. Error message: no lwjgl in java.library.path
	at com.jme3.system.NativeLibraryLoader.loadNativeLibrary(NativeLibraryLoader.java:590)
	at jme3test.helloworld.HelloAudio.simpleInitApp(HelloAudio.java:27)
	at com.jme3.app.SimpleApplication.initialize(SimpleApplication.java:240)
	at com.jme3.system.lwjgl.LwjglWindow.initInThread(LwjglWindow.java:601)
	at com.jme3.system.lwjgl.LwjglWindow.run(LwjglWindow.java:704)
	at java.lang.Thread.run(Thread.java:750)
  • It does not register the ARM natives for macOS and Linux.

Thoughts?

Metadata

Metadata

Assignees

No one assigned

    Labels

    defectSomething that is supposed to work, but doesn't. Less severe than a "bug"

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions