求助:Debian系统手动安装CUDA后的链接与编译问题
Debian下CUDA 11.7安装后编译及autoconf检测问题
我在Debian系统通过.run文件安装了CUDA 11.7和NVIDIA驱动515,目前遇到两个核心问题:
- autoconf脚本检测
cudart和curand库始终失败 - 跳过检测后编译C++代码,出现
cuda.h缺失的错误
当前环境信息
nvcc版本输出
执行nvcc --version得到:
nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2022 NVIDIA Corporation Built on Wed_Jun__8_16:49:14_PDT_2022 Cuda compilation tools, release 11.7, V11.7.99 Build cuda_11.7.r11.7/compiler.31442593_0
已配置的环境变量
~/.bashrc中已添加:
export PATH=${PATH}:/usr/local/cuda-11.7/bin export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda-11.7/lib64
ldconfig相关输出
将/usr/local/cuda-11.7/lib64添加到ld.so.conf后,执行sudo ldconfig -v | grep cuda输出:
ldconfig: Can't stat /usr/local/cuda-11/targets/x86_64-linux/lib: No such file or directory ldconfig: Path `/usr/local/cuda-11.7/targets/x86_64-linux/lib' given more than once ldconfig: Can't stat /usr/local/cuda-11.4/targets/x86_64-linux/lib: No such file or directory ldconfig: Can't stat /usr/local/lib/x86_64-linux-gnu: No such file or directory ldconfig: Path `/usr/lib/x86_64-linux-gnu' given more than once ldconfig: Path `/usr/lib32' given more than once ldconfig: Path `/usr/local/cuda-11.7/lib64' given more than once ldconfig: Path `/lib/x86_64-linux-gnu' given more than once ldconfig: Path `/usr/lib/x86_64-linux-gnu' given more than once ldconfig: Path `/usr/lib' given more than once ldconfig: /lib/x86_64-linux-gnu/ld-2.31.so is the dynamic linker, ignoring /usr/local/cuda/targets/x86_64-linux/lib: libcudart.so.11.0 -> libcudart.so.11.7.99 libicudata.so.67 -> libicudata.so.67.1 libcuda.so.1 -> libcuda.so.515.65.01 ldconfig: /lib32/ld-2.31.so is the dynamic linker, ignoring libcuda.so.1 -> libcuda.so.515.65.01
执行sudo ldconfig -p | grep cuda输出:
libnvrtc.so.11.2 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnvrtc.so.11.2 libnvrtc.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnvrtc.so libnvrtc-builtins.so.11.7 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnvrtc-builtins.so.11.7 libnvrtc-builtins.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnvrtc-builtins.so libnvjpeg.so.11 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnvjpeg.so.11 libnvjpeg.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnvjpeg.so libnvblas.so.11 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnvblas.so.11 libnvblas.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnvblas.so libnvToolsExt.so.1 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnvToolsExt.so.1 libnvToolsExt.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnvToolsExt.so libnpps.so.11 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnpps.so.11 libnpps.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnpps.so libnppitc.so.11 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnppitc.so.11 libnppitc.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnppitc.so libnppisu.so.11 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnppisu.so.11 libnppisu.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnppisu.so libnppist.so.11 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnppist.so.11 libnppist.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnppist.so libnppim.so.11 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnppim.so.11 libnppim.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnppim.so libnppig.so.11 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnppig.so.11 libnppig.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnppig.so libnppif.so.11 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnppif.so.11 libnppif.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnppif.so libnppidei.so.11 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnppidei.so.11 libnppidei.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnppidei.so libnppicc.so.11 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnppicc.so.11 libnppicc.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnppicc.so libnppial.so.11 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnppial.so.11 libnppial.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnppial.so libnppc.so.11 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnppc.so.11 libnppc.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libnppc.so libicudata.so.67 (libc6,x86-64) => /lib/x86_64-linux-gnu/libicudata.so.67 libicudata.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libicudata.so libcusparse.so.11 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcusparse.so.11 libcusparse.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcusparse.so libcusolverMg.so.11 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcusolverMg.so.11 libcusolverMg.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcusolverMg.so libcusolver.so.11 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcusolver.so.11 libcusolver.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcusolver.so libcurand.so.10 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcurand.so.10 libcurand.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcurand.so libcuinj64.so.11.7 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcuinj64.so.11.7 libcuinj64.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcuinj64.so libcufile_rdma.so.1 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcufile_rdma.so.1 libcufile_rdma.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcufile_rdma.so libcufile.so.0 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcufile.so.0 libcufile.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcufile.so libcufftw.so.10 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcufftw.so.10 libcufftw.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcufftw.so libcufft.so.10 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcufft.so.10 libcufft.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcufft.so libcudart.so.11.0 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcudart.so.11.0 libcudart.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcudart.so libcuda.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libcuda.so.1 libcuda.so.1 (libc6) => /lib32/libcuda.so.1 libcuda.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libcuda.so libcuda.so (libc6) => /lib32/libcuda.so libcublasLt.so.11 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcublasLt.so.11 libcublasLt.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcublasLt.so libcublas.so.11 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcublas.so.11 libcublas.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libcublas.so libaccinj64.so.11.7 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libaccinj64.so.11.7 libaccinj64.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libaccinj64.so libOpenCL.so.1 (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libOpenCL.so.1 libOpenCL.so (libc6,x86-64) => /usr/local/cuda/targets/x86_64-linux/lib/libOpenCL.so
注:通过apt安装旧版CUDA时编译正常,但需要使用11.7版本。
解决方案
1. 补充CUDA头文件环境变量
cuda.h缺失是因为编译器找不到CUDA的头文件目录,需要添加头文件搜索路径到~/.bashrc:
export C_INCLUDE_PATH=${C_INCLUDE_PATH}:/usr/local/cuda-11.7/include export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}:/usr/local/cuda-11.7/include
添加后执行source ~/.bashrc使配置立即生效。
2. 修复autoconf库检测问题
autoconf脚本无法自动识别CUDA库路径时,需手动指定编译和链接参数:
- 运行autoconf相关脚本前,先设置以下环境变量:
export LDFLAGS="-L/usr/local/cuda-11.7/lib64 -L/usr/local/cuda/targets/x86_64-linux/lib" export CFLAGS="-I/usr/local/cuda-11.7/include" export CXXFLAGS="-I/usr/local/cuda-11.7/include"
- 再执行
./configure等autoconf脚本,即可正常检测到cudart和curand库。
3. 统一CUDA路径软链接(可选)
从ldconfig输出可见,系统默认通过/usr/local/cuda软链接访问CUDA资源,确保它指向正确的11.7版本:
sudo rm -f /usr/local/cuda sudo ln -s /usr/local/cuda-11.7 /usr/local/cuda
此操作可避免后续工具因版本路径混乱导致的问题。
4. 验证配置有效性
创建测试文件test_cuda.cu:
#include <cuda.h> #include <stdio.h> int main() { int deviceCount; cudaGetDeviceCount(&deviceCount); printf("Detected %d CUDA devices\n", deviceCount); return 0; }
用nvcc编译并运行:
nvcc test_cuda.cu -o test_cuda ./test_cuda
若正常输出设备数量,说明CUDA环境配置完成。
内容的提问来源于stack exchange,提问作者CGYak
相关产品推荐
相关产品推荐

