Search code examples
javajoglunsatisfiedlinkerror

JOGL exporting to windows 8 and getting unsatisfied link error


I have been writing a game using JOGL libraries for graphics and when I have been exporting this game it has only been working on my machine. My processor is an AMD Phenom II X4 840 Processor at 3.2 GHz on Windows 7. When I export the game and run using CMD the game works fine and there are no errors.

However, when running on my friends computer I get an unsatisfied link error. His computer has a AMD A6-4400M APU and he is running Windows 8.

The error message seems to be very vague and I havn't been able to adress the problem.

Exception in thread "main" java.lang.UnsatisfiedLinkError:jogamp.opengl.windows.wgl.WGL.dispatch_wglGetProcAddress0(Ljava/lang/String;J)J
    at jogamp.opengl.windows.wgl.WGL.dispatch_wglGetProcAddress0(Native Method)
    at jogamp.opengl.windows.wgl.WGL.wglGetProcAddress(WGL.java:276)
      at jogamp.opengl.windows.wgl.WindowsWGLDynamicLibraryBundleInfo.toolGetProcAddress(WindowsWGLDynamicLibrar   yBundleInfo.java:57)
    at com.jogamp.common.os.DynamicLibraryBundle.toolDynamicLookupFunction(DynamicLibraryBundle.java:341)
    at com.jogamp.common.os.DynamicLibraryBundle.dynamicLookupFunction(DynamicLibraryBundle.java:369)
    at com.jogamp.gluegen.runtime.opengl.GLProcAddressResolver.resolve(GLProcAddressResolver.java:54)
    at com.jogamp.gluegen.runtime.ProcAddressTable.setEntry(ProcAddressTable.java:177)
    at com.jogamp.gluegen.runtime.ProcAddressTable.reset(ProcAddressTable.java:145)
    at jogamp.opengl.windows.wgl.WindowsWGLDrawableFactory$1.run(WindowsWGLDrawableFactory.java:100)
    at jogamp.opengl.windows.wgl.WindowsWGLDrawableFactory$1.run(WindowsWGLDrawableFactory.java:93)
    at java.security.AccessController.doPrivileged(Native Method)
    at jogamp.opengl.windows.wgl.WindowsWGLDrawableFactory.<init>(WindowsWGLDrawableFactory.java:93)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.jogamp.common.util.ReflectionUtil.createInstance(ReflectionUtil.java:171)
    at com.jogamp.common.util.ReflectionUtil.createInstance(ReflectionUtil.java:193)
    at com.jogamp.common.util.ReflectionUtil.createInstance(ReflectionUtil.java:213)
    at com.jogamp.common.util.ReflectionUtil.createInstance(ReflectionUtil.java:235)
    at javax.media.opengl.GLDrawableFactory.initSingletonImpl(GLDrawableFactory.java:166)
    at javax.media.opengl.GLDrawableFactory.initSingleton(GLDrawableFactory.java:129)
    at javax.media.opengl.GLProfile.initProfilesForDefaultDevices(GLProfile.java:1573)
    at javax.media.opengl.GLProfile.access$100(GLProfile.java:76)
    at javax.media.opengl.GLProfile$1.run(GLProfile.java:155)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.media.opengl.GLProfile.initSingleton(GLProfile.java:123)
    at javax.media.opengl.GLProfile.getDefaultDevice(GLProfile.java:1837)
    at javax.media.opengl.awt.GLJPanel.<init>(GLJPanel.java:337)
    at javax.media.opengl.awt.GLJPanel.<init>(GLJPanel.java:291)
    at javax.media.opengl.awt.GLJPanel.<init>(GLJPanel.java:282)
    at main.Main.<init>(Main.java:73)
    at main.Main.main(Main.java:94)

The lines in my code 73 and 94 are:

73: canvas = new GLJPanel();

94: final Main main = new Main(); //When I initialise the main class

My layout when I export it goes like this:

  • META-INF
  • Q_lib
  • Q.jar
  • run.bat (just java -jar Q.jar to run the jar file).

Inside the jar file Q.jar I have all of the .dll's for all of the types of systems.

If you need more code from my main class, I can post it up, it is too long otherwise to put up here.

Any help would be highly appreciated.


Solution

  • You have to follow this rule to allow GlueGen to find the native libraries when making a fat JAR, otherwise it won't know in which directories to look at them, it won't extract them, they won't be loaded and you'll get an unsatisfied link error. I advise you to post your technical questions about JOGL on its official forum in the future as only a very few JogAmp contributers and maintainers come here.

    Edit.: Never put the native libraries or the JARs directly into the JVM in order to avoid conflicts when running applets and applications.