CUDA und Ubuntu 8.10: __builtin_va_arg_pack is undefined und andere Errors
Da ich mir nun bald das CUDA-Framework näher anschauen werde, hier ein paar Tipps um das SDK mit den Codebeispielen compiliert zu bekommen:
Um generell unter Ubuntu kompilieren zu können, sollte das Paket build-essential installiert sein. Nach der Installation der Ubuntu-Nvidia-Grafiktreiber (sind bereits aktuell) und des CUDA-Toolkits und SDK’s von der CUDA-Seite, gab es bei mir ein paar Probleme beim kompilieren der SDK-Beispiele:
1.
In file included from ./../common/inc/paramgl.h:13,
from src/paramgl.cpp:8:
./../common/inc/GL/glut.h:59:19: error: GL/gl.h: No such file or directory
./../common/inc/GL/glut.h:60:20: error: GL/glu.h: No such file or directory
In file included from ./../common/inc/paramgl.h:13,
from src/paramgl.cpp:8:
./../common/inc/GL/glut.h:433: warning: ‘glutUseLayer’ initialized and declared ‘extern’
./../common/inc/GL/glut.h:433: error: variable or field ‘glutUseLayer’ declared void
./../common/inc/GL/glut.h:433: error: ‘GLenum’ was not declared in this scope
./../common/inc/GL/glut.h:491: error: ‘GLfloat’ has not been declared
./../common/inc/GL/glut.h:491: error: ‘GLfloat’ has not been declared
./../common/inc/GL/glut.h:491: error: ‘GLfloat’ has not been declared
./../common/inc/GL/glut.h:492: error: ‘GLfloat’ does not name a type
./../common/inc/GL/glut.h:496: warning: ‘glutGet’ initialized and declared ‘extern’
Das Problem wird gelöst, in dem die Opengl-devel Pakete installiert werden: apt-get install libglut3-dev
2.
make[1]: Entering directory `/home/ich/NVIDIA_CUDA_SDK/projects/dxtc’
/usr/include/bits/stdio2.h(35): error: identifier “__builtin_va_arg_pack” is undefined
/usr/include/bits/stdio2.h(66): error: identifier “__builtin_va_arg_pack” is undefined
/usr/include/bits/stdio2.h(99): error: identifier “__builtin_va_arg_pack” is undefined
/usr/include/bits/stdio2.h(105): error: identifier “__builtin_va_arg_pack” is undefined
/usr/include/bits/stdio2.h(159): error: identifier “__builtin_va_arg_pack” is undefined
/usr/include/bits/stdio2.h(167): error: identifier “__builtin_va_arg_pack” is undefined
/usr/include/bits/stdio2.h(174): error: identifier “__builtin_va_arg_pack” is undefined
/usr/include/bits/stdio2.h(182): error: identifier “__builtin_va_arg_pack” is undefined
Diese Fehler hängen damit zusammen das Ubuntu 8.10 nicht offiziel unterstützt wird, bzw. genauer gesagt die gcc-version Probleme bereitet.
Ein Workaround der bei mir funktionierte:
sudo apt-get install gcc-4.2 g++-4.2
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.2 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.2
3. /usr/bin/ld: cannot find -lXmu
Lösung: xmu muss installiert werden
sudo apt-get install libxmu-dev libxmu6
4.
make[1]: Entering directory `/home/ich/NVIDIA_CUDA_SDK/projects/simpleTextureDrv’
In file included from /usr/include/features.h:354,
from /usr/cuda/bin/../include/host_config.h:53,
from /usr/cuda/bin/../include/cuda_runtime.h:45,
from
/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory
make[1]: *** [data/simpleTexture_kernel.cubin] Error 255
make[1]: Leaving directory `/home/ich/NVIDIA_CUDA_SDK/projects/simpleTextureDrv’
make: *** [projects/simpleTextureDrv/Makefile.ph_build] Error 2
Die Glibc-Pakete für 32-bit Anwendungen unter 64-bit fehlen (Der Fehler betrifft nur 64bit-Installationen)
sudo apt-get install libc6-dev-i386 libc6-i386
Nach diesen Korrekturen kompilierten alle Beispiele durch und die die ich bisher probierte starteten auch ohne Probleme auf meiner Geforce 260. Das Mandelbrot-Beispiel ließ meinen ganzen PC abstürzen und die Grafikkarte nur noch Fiebgeräusche von sich geben (!), hier vermute ich Compiz als übeltäter, den man wohl besser bei Cuda-Experimenten abschaltet.