You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下CMake+CUDA10.1编译出现-lcudart未找到链接错误

解决CMake链接cudart库失败及CUDA变量为空的问题

从你的错误信息和CMake配置来看,主要有几个核心问题导致链接失败、CUDA相关变量为空,下面逐一给出解决方案:

1. 修正C++/CUDA标准设置的语法错误

你在设置语言标准时写错了变量格式,把CMAKE_CXX_STANDARD 17写成了CMAKE_CXX_STANDARD_17(下划线替代了空格),这会导致标准配置完全失效,甚至干扰CMake对CUDA的检测逻辑。

修正代码:

if (NOT DEFINED CMAKE_CXX_STANDARD)
    set(CMAKE_CXX_STANDARD 17)  # 注意是空格分隔,不是下划线
    set(CMAKE_CXX_STANDARD_REQUIRED True)
endif()
if (NOT DEFINED CMAKE_CUDA_STANDARD)
    set(CMAKE_CUDA_STANDARD 17)  # 同样修正此处
    set(CMAKE_CUDA_STANDARD_REQUIRED True)
endif()

2. 手动指定CUDA 10.1的安装根目录

你的CUDA实际安装在/usr/local/cuda-10.1,但CMake默认会优先查找/usr/local/cuda(通常是软链接),而你的环境中这个软链接可能没有正确关联到10.1版本,导致CMake无法识别CUDA版本和库路径。

解决方法:在CMakeLists开头添加根目录指定:

cmake_minimum_required(VERSION 3.15)
# 手动指定CUDA 10.1的安装路径
set(CUDA_TOOLKIT_ROOT_DIR "/usr/local/cuda-10.1")
project(testcuda CXX CUDA)

3. 显式调用find_package(CUDA)获取正确的库变量

虽然CMake 3.15支持将CUDA作为语言启用,但显式调用find_package(CUDA)可以强制CMake完整检测CUDA的版本、头文件路径和库文件路径,自动填充CUDA_VERSION、CUDA_LIBRARIES等变量,避免手动链接时找不到库的问题。

调整后的链接配置:

# 显式查找CUDA 10.1版本
find_package(CUDA 10.1 REQUIRED)
# 使用CMake检测到的官方库变量,而非手动写库名
target_link_libraries(testcuda PRIVATE ${CUDA_CUDART_LIBRARY} ${CUDA_LIBRARIES})

完整修正后的CMakeLists.txt

cmake_minimum_required(VERSION 3.15)
# 指定CUDA 10.1安装根目录
set(CUDA_TOOLKIT_ROOT_DIR "/usr/local/cuda-10.1")
project(testcuda CXX CUDA)

# 修正C++标准设置
if (NOT DEFINED CMAKE_CXX_STANDARD)
    set(CMAKE_CXX_STANDARD 17)
    set(CMAKE_CXX_STANDARD_REQUIRED True)
endif()

# 修正CUDA标准设置
if (NOT DEFINED CMAKE_CUDA_STANDARD)
    set(CMAKE_CUDA_STANDARD 17)
    set(CMAKE_CUDA_STANDARD_REQUIRED True)
endif()

set(CMAKE_EXE_LINKER_FLAGS -v)
add_executable(testcuda main.cpp)

# 关联CUDA头文件和库
find_package(CUDA 10.1 REQUIRED)
target_include_directories(testcuda PRIVATE ${CUDA_INCLUDE_DIRS})
target_link_libraries(testcuda PRIVATE ${CUDA_CUDART_LIBRARY} ${CUDA_LIBRARIES})

# 打印调试信息(验证变量是否被正确填充)
MESSAGE(STATUS "CUDA Include Directories: ${CUDA_INCLUDE_DIRS}")
MESSAGE(STATUS "CUDA Libraries: ${CUDA_LIBRARIES}")
MESSAGE(STATUS "CUDA Version: ${CUDA_VERSION}")

额外检查项

  • 可以手动添加库搜索路径确保CMake能找到cudart:link_directories("/usr/local/cuda-10.1/targets/x86_64-linux/lib")
  • 检查/usr/local/cuda软链接是否正确:执行ls -l /usr/local/cuda,确认它指向/usr/local/cuda-10.1

内容的提问来源于stack exchange,提问作者user3691191

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:25:36