从源码安装OpenCV 4.5.2时sudo make install报错找不到cuda.h
OpenCV 4.5.2源码安装sudo make install时cuda.h缺失问题解决
问题背景
已从GitHub克隆OpenCV及contrib仓库并切换至4.5.2标签,使用以下CMake参数完成配置:
cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D WITH_CUDA=ON -D WITH_CUBLAS=ON \ -D WITH_TBB=ON -D WITH_V4L=ON \ -D WITH_QT=OFF -D WITH_OPENGL=ON \ -D BUILD_PERF_TESTS=OFF \ -D BUILD_opencv_cudacodec=OFF \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \ -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON\ -D OPENCV_ENABLE_NONFREE=ON -D BUILD_NEW_PYTHON_SUPPORT=ON \ -D BUILD_opencv_python3=ON -D HAVE_opencv_python3=ON\ -D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3 \ -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda ..
CUDA 11.4已安装,nvidia-smi和nvcc -V验证正常,make -j10编译成功,但执行sudo make install时出现错误:
opencv/modules/core/include/opencv2/core/private.cuda.hpp:59:12: fatal error: cuda.h: No such file or directory 59 | # include <cuda.h> | ^~~~~~~~ compilation terminated.
CMake配置阶段已检测到CUDA:
-- Could NOT find CUDNN (missing: CUDNN_LIBRARY CUDNN_INCLUDE_DIR) (Required is at least version "7.5") -- CUDA detected: 11.4 -- CUDA: Using CUDA_ARCH_BIN=3.5;3.7;5.0;5.2;6.0;6.1;7.0;7.5;8.0;8.6 -- CUDA NVCC target flags: -gencode;arch=compute_35,code=sm_35;-gencode;arch=compute_37,code=sm_37;-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_52,code=sm_52;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_61,code=sm_61;-gencode;arch=compute_70,code=sm_70;-gencode;arch=compute_75,code=sm_75;-gencode;arch=compute_80,code=sm_80;-gencode;arch=compute_86,code=sm_86;-D_FORCE_INLINES
cuda.h头文件存在于/usr/local/cuda-11.4/include/cuda.h和/usr/local/cuda/include/cuda.h。
环境信息:
cmake version 3.27.6 gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0 kernel: 5.15.0-107-generic NVIDIA-SMI 470.239.06 Driver Version: 470.239.06 CUDA Version: 11.4
解决方案
方法1:传递用户环境变量给sudo执行install
sudo默认会重置环境变量,导致编译器无法找到CUDA头文件路径。执行以下命令,将当前用户的环境变量传递给sudo进程:
sudo env PATH=$PATH CPATH=$CPATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH make install
方法2:重新CMake时显式指定CUDA include路径
在原CMake参数中添加-D CUDA_INCLUDE_DIRS=/usr/local/cuda/include,重新配置后再编译安装:
# 进入build目录,清理原有配置 rm -rf CMakeCache.txt CMakeFiles # 重新执行cmake cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D WITH_CUDA=ON -D WITH_CUBLAS=ON \ -D WITH_TBB=ON -D WITH_V4L=ON \ -D WITH_QT=OFF -D WITH_OPENGL=ON \ -D BUILD_PERF_TESTS=OFF \ -D BUILD_opencv_cudacodec=OFF \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \ -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON\ -D OPENCV_ENABLE_NONFREE=ON -D BUILD_NEW_PYTHON_SUPPORT=ON \ -D BUILD_opencv_python3=ON -D HAVE_opencv_python3=ON\ -D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3 \ -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda \ -D CUDA_INCLUDE_DIRS=/usr/local/cuda/include .. # 重新编译安装 make -j10 sudo make install
方法3:配置root用户的环境变量
编辑root用户的~/.bashrc文件,添加CUDA路径配置:
sudo nano ~root/.bashrc
添加以下内容:
export CPATH=/usr/local/cuda/include:$CPATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
保存后执行:
sudo source ~root/.bashrc sudo make install
方法4:安装时显式指定include路径
执行install命令时直接通过CXXFLAGS传递CUDA include路径:
sudo make install CXXFLAGS="-I/usr/local/cuda/include"
内容的提问来源于stack exchange,提问作者Belal.
相关产品推荐
相关产品推荐

