Beim Übersetzen von Programmen auf einem System mit NVIDIA Treiber kann man, wenn es dumm läuft auf folgendes Problem stossen:
/usr/X11R6/lib/libGLcore.so.1: undefined reference to `_nv000042gl' /usr/lib/gcc/i586-suse-linux/4.1.2/../../../libGL.so: undefined reference to `_nv000044gl'
Entstanden ist das Problem durch eine unzureichende Abgrenzung zwischen der OpenGL Implementation von MESA und NVIDIA. Es lässt sich vollständig vermeiden, wenn das NVIDIA OpenGL Paket per Paketmanager anstatt manuell eingespielt wird.
nvidia-gfxG01-kmp-default
x11-video-nvidiaG01
Während erstes Paket nur den Treiber (nvidia.ko) enthält, beinhaltet das 2.Paket auch die klassische OpenGL Bibliothek (libGL.so). Der Vorteil dieses Paketes ist, dass alle Teile unter
/usr/lib/X11R6
landen. Die generische OpenGL Implementation eines jeden Linux Systems wird durch MESA bereitgestellt, welches die gleichen (und ein paar mehr) Dateien unter
/usr/lib
bereitstellt. Jede Anwendung kann dann entscheiden, ob es die generische oder die spezielle NVIDIA OpenGL Implementation nimmt – was im Normallfall nicht vorkommt.
Das obige Übersetzungsproblem entsteht nun dadurch, dass man den NVIDIA Treiber manuell installiert, und dabei die OpenGL Implementation nach /usr/lib schreibt. Dadurch ergibt sich in diesem Bereich ein Mix von OpenGL shared objects, die teilweise NVIDIA Code benötigen oder auch nicht.
Bereinigen kann man die Situation durch löschen aller OpenGL Bestandteile in /usr/lib und Neuinstallation des MESA packages.
Problematisch kann es auch beim dynamischen Linken einiger Programme gegenüber OpenGL mit den neuesten nVIDIA 180.XX Treiber werden.
Dies ist im 32bit Verzeichnis (/usr/lib) die Situation nach einem manuellen Einspielen des nVIDIA Paketes.
lrwxrwxrwx 1 root root 19 11. Feb 21:13 libGLcore.so.1 -> libGLcore.so.180.29
-rwxr-xr-x 1 root root 15782884 11. Feb 21:13 libGLcore.so.180.29
-rw-r–r– 1 root root 653 11. Feb 21:13 libGL.la
lrwxrwxrwx 1 root root 10 11. Feb 21:13 libGL.so -> libGL.so.1
lrwxrwxrwx 1 root root 15 11. Feb 21:13 libGL.so.1 -> libGL.so.180.29
-rwxr-xr-x 1 root root 701784 11. Feb 21:13 libGL.so.180.29
-rwxr-xr-x 1 root root 410216 13. Feb 10:03 libGL.so.1.2
lrwxrwxrwx 1 root root 20 27. Jan 21:12 libGLU.so.1 -> libGLU.so.1.3.070200
-rwxr-xr-x 1 root root 467920 23. Jan 16:39 libGLU.so.1.3.070200
Man erkennt dass die zentrale Biblitothek, gegen die die meisten OpenGL Programme linken (libGL.so.1) ein symlink auf libGL.so.180.29 ist, also die OpenGL Bibliothek von nVIDIA. Während die MESA Implementation dieser Bibliothek libGL.so.1.2 brach liegt (es sei denn ein Programm würde explizit dagegen linken).
Der Vorteil der nVIDIA Bibliothek ist, dass diese bereits OpenGL 3.0 unterstützt, während MESA einen niederen Standard (leider keine Ahnung was genau) unterstützt.
Der Nachteil der nVIDIA Bibliothek ist, dass sie offensichtlich nicht stabil ist, denn einige Programme, so bspw. Bibble5 Preview stürzen beim Start ab.
Leider ist mein eigener Tipp vom Mai 2008 so nicht mehr gültig, denn bspw. im openSUSE nVIDIA repository befinden sich nur relativ alte Treiber, mit denen Novell abwärtskompatibilität mit GeForce Series 5&6 halten will.
Die Hardwärebeschleunigung selber ist davon nicht betroffen. Das zuständige Kernelmodul (=Treiber) befindet sich unter
/usr/lib/`uname -r`/kernel/drivers/video/nvidia.ko