O problema com referências indefinidas para as funções é porque você não liga a biblioteca libcuda usando -lcuda. O guia em por Ondřej Černotík 23.08.2012 / 17:25
Eu tenho tentado fazer o cuda rodar em um laptop baseado no nvidia gt 650m. Estou executando o Ubuntu 12.04 com o driver nvidia 295.59. Além disso, meu laptop usa o Optimus, então eu instalei o driver via zangão. O Bumblebee ainda não está funcionando corretamente - no entanto, acredito que seja possível instalar o CUDA independentemente.
Para instalar o CUDA, segui as instruções detalhadas aqui: Como posso obter o nVidia CUDA ou o OpenCL funcionando em um laptop com placa discreta da nVidia / Intel Integrated Graphics?
No entanto, ainda estou encontrando problemas no desenvolvimento do SDK. Fiz as alterações especificadas no link acima em common.mk, mas recebi o seguinte (snippet) do processo de criação:
make[2]: Entering directory '/home/john/NVIDIA_GPU_Computing_SDK/C/src/fluidsGL'
/usr/bin/ld: warning: libnvidia-tls.so.302.17, needed by /usr/lib/nvidia-current/libGL.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libnvidia-glcore.so.302.17, needed by /usr/lib/nvidia-current/libGL.so, not found (try using -rpath or -rpath-link)
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv018tls'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv012glcore'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv017glcore'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv012tls'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv015tls'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv019tls'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv000glcore'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv017tls'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv013tls'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv013glcore'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv018glcore'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv022tls'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv007tls'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv009tls'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv020tls'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv014glcore'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv015glcore'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv016tls'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv001glcore'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv006tls'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv021tls'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv011tls'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv020glcore'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv019glcore'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv002glcore'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv021glcore'
/usr/lib/nvidia-current/libGL.so: undefined reference to '_nv014tls'
collect2: ld returned 1 exit status
make[2]: *** [../../bin/linux/release/fluidsGL] Error 1
make[2]: Leaving directory '/home/john/NVIDIA_GPU_Computing_SDK/C/src/fluidsGL'
make[1]: *** [src/fluidsGL/Makefile.ph_build] Error 2
make[1]: Leaving directory '/home/john/NVIDIA_GPU_Computing_SDK/C'
make: *** [all] Error 2
As bibliotecas que ld alertam estão no meu sistema e estão instaladas no sistema:
$ locate libnvidia-tls.so.302.17 libnvidia-glcore.so.302.17
/usr/lib/nvidia-current/libnvidia-glcore.so.302.17
/usr/lib/nvidia-current/libnvidia-tls.so.302.17
/usr/lib/nvidia-current/tls/libnvidia-tls.so.302.17
/usr/lib32/nvidia-current/libnvidia-glcore.so.302.17
/usr/lib32/nvidia-current/libnvidia-tls.so.302.17
/usr/lib32/nvidia-current/tls/libnvidia-tls.so.302.17
no entanto / usr / lib / nvidia-current e / usr / lib32 / nvidia-current não estão sendo selecionados pelo ldconfig. Eu tentei adicioná-los, adicionando um arquivo para /etc/ld.so.conf.d/ que supera esse erro, no entanto, agora estou recebendo o seguinte erro:
make[2]: Entering directory '/home/john/NVIDIA_GPU_Computing_SDK/C/src/deviceQueryDrv'
cc1plus: warning: command line option ‘-Wimplicit’ is valid for C/ObjC but not for C++ [enabled by default]
obj/x86_64/release/deviceQueryDrv.cpp.o: In function 'main':
deviceQueryDrv.cpp:(.text.startup+0x5f): undefined reference to 'cuInit'
deviceQueryDrv.cpp:(.text.startup+0x99): undefined reference to 'cuDeviceGetCount'
deviceQueryDrv.cpp:(.text.startup+0x10b): undefined reference to 'cuDeviceComputeCapability'
deviceQueryDrv.cpp:(.text.startup+0x127): undefined reference to 'cuDeviceGetName'
deviceQueryDrv.cpp:(.text.startup+0x16a): undefined reference to 'cuDriverGetVersion'
deviceQueryDrv.cpp:(.text.startup+0x1f0): undefined reference to 'cuDeviceTotalMem_v2'
deviceQueryDrv.cpp:(.text.startup+0x262): undefined reference to 'cuDeviceGetAttribute'
deviceQueryDrv.cpp:(.text.startup+0x457): undefined reference to 'cuDeviceGetAttribute'
deviceQueryDrv.cpp:(.text.startup+0x4bc): undefined reference to 'cuDeviceGetAttribute'
deviceQueryDrv.cpp:(.text.startup+0x502): undefined reference to 'cuDeviceGetAttribute'
deviceQueryDrv.cpp:(.text.startup+0x533): undefined reference to 'cuDeviceGetAttribute'
obj/x86_64/release/deviceQueryDrv.cpp.o:deviceQueryDrv.cpp:(.text.startup+0x55e): more undefined references to 'cuDeviceGetAttribute' follow
collect2: ld returned 1 exit status
make[2]: *** [../../bin/linux/release/deviceQueryDrv] Error 1
make[2]: Leaving directory '/home/john/NVIDIA_GPU_Computing_SDK/C/src/deviceQueryDrv'
make[1]: *** [src/deviceQueryDrv/Makefile.ph_build] Error 2
make[1]: Leaving directory '/home/john/NVIDIA_GPU_Computing_SDK/C'
make: *** [all] Error 2
Eu gostaria de receber qualquer ajuda que alguém possa me fornecer. Se eu puder fornecer mais informações, por favor me avise.
Obrigado.
O problema com referências indefinidas para as funções é porque você não liga a biblioteca libcuda usando -lcuda. O guia em por Ondřej Černotík 23.08.2012 / 17:25
Tudo o que preciso fazer é colocar o caminho do driver nvidia no LD_LIBRARY_PATH fazendo: exportar LD_LIBRARY_PATH = $ LD_LIBRARY_PATH: / usr / lib / nvidia-current.
Eu tenho o mesmo problema.
Acho que esta questão também está relacionada: "não é possível encontrar o erro -lOpenCL" ao criar o Cuda SDK
Para poder compilar as amostras cuda e openCL, fiz o seguinte.
Eu segui este guia: Como posso obter o nVidia CUDA ou o OpenCL funcionando em um laptop com placa discreta da nVidia / Intel Integrated Graphics? sem instalar o bumblebee e usando xswat ppa: link
gksudo gedit /etc/environment
change
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
to
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/cuda/bin"
Recarregue o PATH:
source /etc/environment
Defina LD_LIBRARY_PATH:
gksudo gedit /etc/ld.so.conf.d/cuda.conf
Paste into the file:
/usr/local/cuda/lib64
/usr/local/cuda/lib
/usr/lib/nvidia-current
/usr/lib32/nvidia-current
Save and quit the editor.
Recarregue o LD_LIBRARY_PATH:
sudo ldconfig
Editado ~ / .bash.rc, adicionado:
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/lib:/usr/lib/nvidia-current:/usr/lib32/nvidia-current
Recarregar ~ / bash.rc
source ~/bash.rc
Verifique se o openCL está localizado:
ldconfig -v | grep "OpenCL"
...
libOpenCL.so.1 -> libOpenCL.so.1.0.0
libOpenCL.so.1 -> libOpenCL.so.1.0.0
...
As amostras devem agora compilar. No entanto, não tenha a sua esperança. Eu acho que o driver nvidia está com defeito como eu recebo o seguinte erro para amostras cuda:
[vectorAddDrv] starting...
Vector Addition (Driver API)
checkCudaErrors() Driver API error = 0100 "CUDA_ERROR_INVALID_VALUE" from file <vectorAddDrv.cpp>, line 207.
e para amostras openCL:
./oclDeviceQuery
[oclDeviceQuery] starting...
./oclDeviceQuery Starting...
OpenCL SW Info:
Error -1001 in clGetPlatformIDs Call !!!
!!! Error # -1000 (Unspecified Error) at line 46 , in file oclDeviceQuery.cpp !!!
Exiting...