使用 nvidia 驱动程序 295.59 在 Ubuntu 12.04 上安装 CUDA

joh*_*mcd 5 nvidia cuda 12.04 drivers

我一直试图让 cuda 在基于 nvidia gt 650m 的笔记本电脑上运行。我正在使用 nvidia 295.59 驱动程序运行 Ubuntu 12.04。另外,我的笔记本电脑使用 Optimus,所以我通过 bumblebee 安装了驱动程序。Bumblebee 还不能正常工作——但是我相信可以独立安装 CUDA。

要安装 CUDA,我已按照此处详述的说明进行操作: 如何在带有 nVidia 独立显卡/英特尔集成显卡的笔记本电脑上运行 nVidia CUDA 或 OpenCL?

但是,我仍然遇到构建 sdk 的问题。我在common.mk中的上述链接中进行了指定的更改,但我从构建过程中得到了以下(片段):

    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
Run Code Online (Sandbox Code Playgroud)

ld 警告的库在我的系统上并安装在系统上:

    $ 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
Run Code Online (Sandbox Code Playgroud)

但是 /usr/lib/nvidia-current 和 /usr/lib32/nvidia-current 没有被 ldconfig 获取。我尝试通过将文件添加到 /etc/ld.so.conf.d/ 来添加它们,该文件已通过此错误,但是现在我收到以下错误:

    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
Run Code Online (Sandbox Code Playgroud)

我将不胜感激,任何人都可以为我提供任何帮助。如果我能提供任何进一步的信息,请告诉我。

谢谢。

小智 2

对函数未定义引用的问题是因为您没有使用 -lcuda 链接 libcuda 库。如何让 nVidia CUDA 或 OpenCL 在配备 nVidia 独立卡/英特尔集成显卡的笔记本电脑上运行?提到你应该在 common.mk 的一个地方删除 -lcuda,但这对我不起作用。但是,由于编译器找不到该库,因此添加该库所在的目录很重要,以便 common.mk 中的相应行(对我来说是第 276 行)看起来像

    LIB += -L/usr/lib/nvidia-current -lcuda $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB}
Run Code Online (Sandbox Code Playgroud)

必须在 src/deviceQuery 文件夹的 Makefile 中进行类似的更正,最后一行,更改

    LIB += -lcuda
Run Code Online (Sandbox Code Playgroud)

    LIB += -L/usr/lib/nvidia-current -lcuda
Run Code Online (Sandbox Code Playgroud)

希望有帮助!


小智 0

我也有同样的问题。

我认为这个问题也相关: “cannot find -lOpenCL” error while Making the Cuda SDK

为了能够编译 cuda 和 openCL 示例,我执行了以下操作。

我遵循了这个指南:How can I get nVidia CUDA or OpenCL running on a笔记本电脑与nVidia离散卡/英特尔集成显卡? 无需安装 bumblebee 并使用 xswat ppa:https://launchpad.net/~ubuntu-x-swat/+archive/x-updates/

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" 
Run Code Online (Sandbox Code Playgroud)

重新加载路径:

source /etc/environment 
Run Code Online (Sandbox Code Playgroud)

设置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. 
Run Code Online (Sandbox Code Playgroud)

重新加载LD_LIBRARY_PATH:

sudo ldconfig 
Run Code Online (Sandbox Code Playgroud)

编辑~/.bash.rc,添加:

 export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/lib:/usr/lib/nvidia-current:/usr/lib32/nvidia-current
Run Code Online (Sandbox Code Playgroud)

重新加载~/bash.rc

 source ~/bash.rc
Run Code Online (Sandbox Code Playgroud)

检查是否找到openCL:

    ldconfig -v | grep "OpenCL"

    ...
    libOpenCL.so.1 -> libOpenCL.so.1.0.0
libOpenCL.so.1 -> libOpenCL.so.1.0.0
    ...
Run Code Online (Sandbox Code Playgroud)

现在应该可以编译示例了。不过,不要抱太大希望。我认为 nvidia 驱动程序有问题,因为我在 cuda 示例中收到以下错误:

[vectorAddDrv] starting...

Vector Addition (Driver API)
checkCudaErrors() Driver API error = 0100 "CUDA_ERROR_INVALID_VALUE" from file <vectorAddDrv.cpp>, line 207.
Run Code Online (Sandbox Code Playgroud)

对于 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...
Run Code Online (Sandbox Code Playgroud)