Java OpenGL - nogluegen-rt

BattleMaster246

Grünschnabel
Hay, ich habe mein erstes openGL Programm in Java fertig, doch es funktioniert zur Zeit nur auf meinen Rechner. Auf Anderen bekomme ich immer "no gluegen-rt in java.library.classpath". Nun habe ich versucht je nach OS die native Libs zu laden. Hier mal mein Code für Linux X86:

Code:
        String path = path()+"l86/";
        System.load(path+"libgluegen-rt.so");
        System.load(path+"libjogl_desktop.so");
        System.load(path+"libjogl_es1.so");
        System.load(path+"libjogl_es2.so");
        System.load(path+"libjogl_gl2es12.so");
        System.load(path+"libnativewindow_awt.so");
        System.load(path+"libnewt.so");
        System.out.println("### Linux x86 Libs loaded");

Außerdem habe ich in Netbeans die gluegen-rt.jar und jogl.jar in "Libraries" reingelegt. Diese werden beim Build immer in /lib gelegt und in der Manifest eingetragen.



Weis jemand, was ich falsch mache? Ich komm einfach nicht drauf.
 
Es liegt garnicht an den .so und .dll Dateien. Ich habe bei mir eben zum Test die gluegen-rt.jar und jogl.jar aus /usr/lib/jvm/openjdk/lib/ext/ gelöscht. Jetzt erhalte ich den selben Fehler. Die beiden jars habe ich bereits über Netbeans als Library eingefügt. Bei jedem Build laden sie auch in /libs/ und werden wie folg in die Manifest.MF eingetragen:

Class-Path: lib/gluegen-rt.jar lib/jogl.jar
 
Ich habe (bis jetzt) noch nicht mit Netbeans gearbeitet, aber ich weiß aus Eclipse, daß man obacht geben muß, was die Pfade zu irgendwelchen Libraries betrifft. Die Pfade, welche die IDEs intern benutzen, kann man nicht immer 1 zu 1 für das fertig kompilierte und gepackte Programm benutzen.

Nur ein Verdacht, aber ich hoffe doch, daß du die gluegen-rt.jar und die jogl.jar nicht in deine Programm-jar gepackt hast?

MfG
hansmueller
 
Hellas BattleMaster!

Also aus deinem Code ist nicht ganz herauszulesen was Du genau vorhast. Zeigt path auf einen Pfad in deinem JAR? Das wird zB nicht funktionieren, native Libraries gehören in ein externes Verzeichnis und können eigentlich nicht mit einem JAR ausgeliefert werden. Es gibt höchstens Workarounds wo die Librarys im JAR als temporäre Dateien ins Filesystem ausgelagert und dann geladen werden - ist aber unschön.

Beste Grüße,
Billie
 
Die Libs sind nicht in der .jar enthalten.

Code:
public String path()
    {
        String path = MCpong.class.getResource("/empty.txt").getPath();
        String sep = System.getProperty("file.separator");
        String split[] = path.split(sep);
        String p2 = "";
        int c = split.length-2;
        for(int i = 0; i < c; i++)
            p2 = p2+split[i]+sep;
        return p2.replace("file:","")+"lib/";
    }

Ich hole mir durch getResource() und ein paar anderen Sachen den absoluten Pfad zum Verzeichnis, in dem meine jar liegt. In diesem liegt u.A. auch der Ordner libs.
 
Hast Du schon probiert zu überprüfen ob die Datei überhaupt existiert? Also zB:

Java:
new File(path+"libgluegen-rt.so").isFile()
 
Zuletzt bearbeitet von einem Moderator:
Die Datei existiert, denn wenn ich den Dateinamen bei System.load() ändere, bekomme ich folgendes:

Code:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Can't load library: /home/lennard/NetBeansProjects/MCpong/dist/lib/l86/lifbgluegen-rt.so
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1649)
	at java.lang.Runtime.load0(Runtime.java:787)
	at java.lang.System.load(System.java:1022)
	at mcpong.MCpong.lin86(MCpong.java:42)
	at mcpong.MCpong.init(MCpong.java:69)
	at mcpong.MCpong.<init>(MCpong.java:95)
	at mcpong.MCpong.main(MCpong.java:112)

Doch wenn ich den Dateinamen der .so so lasse, bekomme ich keinen Fehler.
 
Zurück