Hallo, nochmal! Ich möchte noch ein paar nähere Infos zu meinem Problem geben. Ich habe mal ein einfaches OpenGL (Beinahe-)Minimalbeispiel (sample1.c) angehängt (Quelle: http://www.heise.de/ix/artikel/1999/12/160/). Beim Compilieren mit gcc sample1.c -lMesaGLU -lMesaGL -lXext -lX11 -lm -lglut -lXi -lXmu -B/usr/X11/lib -pthread erhalte ich
/usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../libglut.so: undefined reference to `glXQueryExtension' /usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../libglut.so: undefined reference to `glXMakeCurrent' /usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../libglut.so: undefined reference to `glXQueryExtensionsString' /usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../libglut.so: undefined reference to `glXChooseVisual' /usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../libglut.so: undefined reference to `glXDestroyContext' /usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../libglut.so: undefined reference to `glXWaitX' /usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../libglut.so: undefined reference to `glXGetProcAddressARB' /usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../libglut.so: undefined reference to `glXQueryVersion' /usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../libglut.so: undefined reference to `glXGetClientString' /usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../libglut.so: undefined reference to `glXIsDirect' /usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../libglut.so: undefined reference to `glXSwapBuffers' /usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../libglut.so: undefined reference to `glXCreateContext' /usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../libglut.so: undefined reference to `glXGetConfig'
Was ist mit den glx-Bibliotheken? "locate glx" findet nur /usr/X11R6/lib/modules/extensions/libglx.a; gebe ich dies mit beim obigen gcc-Aufruf an, ändert sich nichts. YaST findet bei der Paketsuche nach glx auch nichts (relevantes). Any ideas?!? Meine ursprüngliche Frage
Wie ist unter SuSE 9.0 eigentlich der Mechanismus, der entscheidet, welche 3D-Bibliotheken verwendet werden? Bei SuSE 8.x gab es ja diese switch2*-Skripte, die den Symlink libGL.so auf die entsprechenden Bibliotheken (MESA oder hardwarebeschleunigt) umbogen. Wie ist dies in SuSE 9.0 gelöst? bleibt weiterhin offen.
Für Hilfe wäre ich sehr dankbar! Viele Grüße, Oliver Baum
Noch eine kleine Korrektur: statt
gcc sample1.c -lMesaGLU -lMesaGL -lXext -lX11 -lm -lglut -lXi -lXmu -B/usr/X11/lib -pthread muß es
gcc sample1.c -lGLU -lGL -lXext -lX11 -lm -lglut -lXi -lXmu -B/usr/X11/lib -pthread heißen - ich will ja nicht MESA, sondern Hardware-Rendering verwenden. Oliver
Am Montag, 16. Februar 2004 11:14 schrieb Oliver Baum:
Noch eine kleine Korrektur: statt
gcc sample1.c -lMesaGLU -lMesaGL -lXext -lX11 -lm -lglut -lXi -lXmu -B/usr/X11/lib -pthread
muß es
gcc sample1.c -lGLU -lGL -lXext -lX11 -lm -lglut -lXi -lXmu -B/usr/X11/lib -pthread
heißen - ich will ja nicht MESA, sondern Hardware-Rendering verwenden.
Oliver
Deine Fragen kann ich dir nicht beantworten. Aber vielleicht habe ich dennoch eine Loesung fuer dein Problem.Versuch mal libglut vor der libGL einzubinden. Also: gcc sample1.c -lglut -lGLU -lGL -lXext -lX11 -lm -lXi -lXmu -B/usr/X11/lib -pthread
Matthias Guede wrote:
Versuch mal libglut vor der libGL einzubinden.
Vielen Dank! Damit bekomme ich schon mal die undefined references weg. Und das Programm läuft -- allerdings nur mit MESA... :-( Des weiteren habe ich folgendes die 3D-Hardwarebeschleunigung betreffend herausgefunden: In dem ATI-Treiber von SuSE (erhältlich unter ftp://ftp.suse.com/pub/suse/i386/supplementary/X/XFree86/ATI/suse90/fglrx/3.2.8) ist im Gegensatz zu denen von ATI (von http://www2.ati.com/drivers/linux/fglrx-glc22-4.3.0-3.7.0.i386.rpm) die libGL.so _nicht_ enthalten. Warum dann aber glxgears bei mir 2200fps erreichte (und tuxracer mit
80fps flüssig lief), bleibt mir weiterhin ein Rätsel...
Werde jetzt 'mal versuchen, die von ATI zu installieren... Oliver PS: Immer noch wüßte ich gerne, wie man dann zwischen fglrx und MESA umschaltet... *g*
On Mon, 2004-02-16 at 16:18, Oliver Baum wrote:
Matthias Guede wrote:
Versuch mal libglut vor der libGL einzubinden.
Vielen Dank! Damit bekomme ich schon mal die undefined references weg. Und das Programm läuft -- allerdings nur mit MESA... :-(
-lGLU -lGL statt -lMesaGLU -lMesaGL
Des weiteren habe ich folgendes die 3D-Hardwarebeschleunigung betreffend herausgefunden: In dem ATI-Treiber von SuSE (erhältlich unter ftp://ftp.suse.com/pub/suse/i386/supplementary/X/XFree86/ATI/suse90/fglrx/3.2.8) ist im Gegensatz zu denen von ATI (von http://www2.ati.com/drivers/linux/fglrx-glc22-4.3.0-3.7.0.i386.rpm) die libGL.so _nicht_ enthalten.
libGL.so ist normalerweise ein Symlink auf die eigentliche libGL.so.X.Y.Z. Da SuSE aber mit libGL.* und den diversen Vendor-Versionen der libGL (NVidia/ATI/Mesa) einige Tricksereien veranstaltet, kann ich Dir mangels SuSE nicht sagen, was SuSE im Detail genau anstellt.
Warum dann aber glxgears bei mir 2200fps erreichte (und tuxracer mit
80fps flüssig lief), bleibt mir weiterhin ein Rätsel... ldd glxgears sollte Dir verraten, welche libGL tatsächlich verwendet wird.
Davon abgesehen, bestehen GLX-Apps wie alle X11-Apps grundsätzlich aus zwei Teilen: Einem auf dem X11-Server laufenden und dem auf dem X11-Client laufenden Teil. Dabei hat der auf dem Server laufenden Teil normalerweise den weitaus überwiegenden Einfluss auf die Performance, egal welche libGL auf Client-Seite verwendet wird. Theoretisch kannst Du dadurch, dass auf Client und auf Server-Seite Vendor-spezifische GL-libs verwendet werden, noch eine weitere Performancesteigerung herausholen, praktisch ist dieser Anteil oft aber kaum messbar. Auch ist es möglich, gegen die Libs eines Vendors zu linken, zur Laufzeit aber die Libs eines anderen Vendors zu verwenden. Gut möglich, dass SuSE diesen Trick verwendet (Linken gegen Mesa, zur Laufzeit Vendor-Libs). Ralf
On Mon, 2004-02-16 at 10:56, Oliver Baum wrote:
Hallo, nochmal!
Ich möchte noch ein paar nähere Infos zu meinem Problem geben. Ich habe mal ein einfaches OpenGL (Beinahe-)Minimalbeispiel (sample1.c) angehängt (Quelle: http://www.heise.de/ix/artikel/1999/12/160/).
Beim Compilieren mit gcc sample1.c -lMesaGLU -lMesaGL -lXext -lX11 -lm -lglut -lXi -lXmu -B/usr/X11/lib -pthread
Die Bedeutung von -B ist Dir schon klar? Du suchst -L ;) Ralf
Ralf Corsepius wrote:
Beim Compilieren mit gcc sample1.c -lMesaGLU -lMesaGL -lXext -lX11 -lm -lglut -lXi -lXmu -B/usr/X11/lib -pthread
Die Bedeutung von -B ist Dir schon klar? Du suchst -L ;)
oops... Das hab' ich wohl von dem Listing fälschlicherweise so übernommen. Muß natürlich -L heißen.... Danke! Info: Habe jetzt die Radeon-Treiber direkt von ATI installiert. Diese legen die libGL.so.1.2 nach /usr/X11/lib, wo sie dann auch gefunden werden, wenn man -L/usr/X11/lib (!!) angibt... Somit scheint jetzt alles okay zu sein (bis auf, daß Textkonsolen (STRG-ALT-F2..F6) immer entweder gar nicht oder nur auf dem am Analogausgang der Karte angeschlossenen Monitor dargestellt werden, X auf dem Display am DVI-Ausgang). Grüße, Oliver
participants (3)
-
Matthias Guede
-
Oliver Baum
-
Ralf Corsepius