【已解决】Could NOT find CUDA (missing: CUDA_INCLUDE_DIRS) (found suitable exact version “10.2“)

在编译openvslam时遇到CUDA找不到的错误,即使CUDA已安装并添加了环境变量。问题根源是CUDA安装目录权限不足。通过修改/usr/local/cuda及其子目录的权限为可读可写,特别是使用chmod -R 777命令,成功解决了cmake无法调用CUDA的问题,后续编译正常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【已解决】Could NOT find CUDA , missing: CUDA_INCLUDE_DIRS, found suitable exact version "10.2"

问题描述

在服务器上cmake编译openvslam时出现以下报错:
在这里插入图片描述
但是cuda安装了,环境变量也添加了,版本也可以查到。
也就是说:cuda明明安装了,但就是调用不到。
是因为cuda安装到的那个文件夹(/usr/local/cuda)访问权限没打开,所以只检查到有版本存在但是不能调用。

解决方法

尝试将cuda文件夹的访问权限改为可读可写。
文件位置如下:
在这里插入图片描述

linux下修改文件夹及子文件夹和文件的权限:https://www.cnblogs.com/yeahgis/archive/2012/04/06/2434069.html

$    sudo chmod –R 600 ××× (只有所有者有读和写的权限)

$    sudo chmod –R 644 ××× (所有者有读和写的权限,组用户只有读的权限)

$    sudo chmod –R 700 ××× (只有所有者有读和写以及执行的权限)

$    sudo chmod –R 666 ××× (每个人都有读和写的权限)

$    sud
### 解决 CMake 找不到 CUDA 的问题 当遇到 `Could NOT find CUDA (missing: CUDA_INCLUDE_DIRS)` 错误时,这通常意味着 CMake 无法找到所需的 CUDA 安装路径。对于 CMake 版本 3.22CUDA 版本 11.7 组合的情况,可以采取以下措施来解决问题。 #### 配置环境变量 确保系统的环境变量已正确配置以指向 CUDA 工具包的位置。具体来说,`CUDA_HOME` 或者 `CUDA_PATH` 应该被设置成安装目录,并且 `%CUDA_HOME%\bin` 或 `%CUDA_PATH%\bin` 被加入到 PATH 中[^1]。 #### 修改 CMakeLists.txt 文件 如果项目依赖于特定版本的 CUDA,则可以在项目的 `CMakeLists.txt` 文件里指定它: ```cmake set(CUDA_VERSION "11.7") find_package(CUDA ${CUDA_VERSION} REQUIRED) ``` 这段代码强制指定了要使用的 CUDA 版本并标记为必需项。这样做的好处是可以避免因默认检测机制而引起的兼容性问题。 #### 使用 FindCUDA.cmake 自定义模块 有时内置的方法可能不够灵活;这时可以通过创建自定义查找脚本来实现更精确控制。将下面的内容保存为 `FindCUDA.cmake` 并放置在工程根目录下的 `cmake/Modules/` 子文件夹内: ```cmake if(NOT DEFINED ENV{CUDA_HOME}) message(FATAL_ERROR "Environment variable 'CUDA_HOME' is not set.") endif() get_filename_component(_cuda_home "$ENV{CUDA_HOME}" ABSOLUTE) set(CUDA_TOOLKIT_ROOT_DIR "${_cuda_home}") set(CUDA_INCLUDE_DIRS "${_cuda_home}/include") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") find_program( CUDA_NVCC_EXECUTABLE NAMES nvcc HINTS "${CUDA_TOOLKIT_ROOT_DIR}/bin" ) mark_as_advanced( CUDA_TOOLKIT_ROOT_DIR CUDA_INCLUDE_DIRS CUDA_NVCC_EXECUTABLE ) message(STATUS "Found CUDA Toolkit at ${CUDA_TOOLKIT_ROOT_DIR}") ``` 此方法通过显式设定各个组件的具体位置绕过了标准发现过程中的潜在障碍。 #### 更新 CMake 缓存 每次修改了与构建有关的信息之后都应该清理旧缓存重新生成新的 Makefile 或解决方案文件。命令如下所示: ```bash rm -rf build/ mkdir build && cd build cmake .. ``` 上述操作会移除之前所有的中间产物从而使得一切从头开始处理。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值