【问题标题】:Linker error -lcudart not found with CMake and Cuda 10.1 in ubuntu在 ubuntu 中未使用 CMake 和 Cuda 10.1 找到链接器错误 -lcudart
【发布时间】:2020-02-25 19:16:36
【问题描述】:

我正在尝试使用 CMake 构建一个非常简单的 cuda 示例。该示例调用cudaGetDeviceCount 函数。我从另一篇文章中了解到,我需要将它与cudart 库链接。我收到此错误:

Found CUDA installation: /usr/local/cuda, version unknown
 "/usr/bin/ld" -z relro --hash-style=gnu --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o testcuda /usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0/../../../x86_64-linux-gnu/crt1.o /usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0/../../../x86_64-linux-gnu/crti.o /usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0/crtbegin.o -L/usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0 -L/usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0/../../../x86_64-linux-gnu -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0/../../.. -L/usr/lib/llvm-6.0/bin/../lib -L/lib -L/usr/lib CMakeFiles/testcuda.dir/main.cpp.o -lcuda -lcudart -L/usr/local/cuda/lib64/stubs -L. -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0/crtend.o /usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0/../../../x86_64-linux-gnu/crtn.o
/usr/bin/ld: cannot find -lcudart

这是我的 CMakeLists.txt。

cmake_minimum_required(VERSION 3.15)
project (testcuda CXX 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()

set (CMAKE_EXE_LINKER_FLAGS -v)

add_executable (testcuda main.cpp)
target_include_directories(testcuda PRIVATE ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES})
target_link_libraries(testcuda cuda cudart)
MESSAGE (STATUS ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES})
MESSAGE (STATUS ${CUDA_LIBRARIES})
MESSAGE (STATUS ${CUDA_VERSION})

我的 libcudart 的位置在这里:

/usr/local/cuda-10.1/targets/x86_64-linux/lib/libcudart.so

变量CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES的输出是/usr/local/cuda/targets/x86_64-linux/include,但是CUDA_LIBRARIESCUDA_VERSION都是空的。

我的 CMake 是 3.15。

我错过了什么吗?

【问题讨论】:

    标签: c++ cmake cuda clang


    【解决方案1】:

    当您将 CUDA 一流语言支持与 cmake 一起使用时,它希望您使用 .cu 扩展名命名任何与 CUDA 相关的文件。将main.cpp 重命名为main.cu

    你还在用 cudart 吗?简单的cudaGetDeviceCount 调用不需要它。

    也就是说,version unknown 行令人担忧。通常/usr/local/cuda 是一个符号链接,那是什么意思?检查以确保它指向 cuda-10.1。如果没问题,那么您可能需要重新安装 CUDA 工具包

    【讨论】:

    • 你当然需要 cudart 来调用 cudaGetDeviceCount。
    • 感谢迈克尔和罗伯特。在我将文件扩展名更改为 .cu 后它可以工作。但是,根据此页面,llvm.org/docs/CompileCudaWithLLVM.html“Clang 通过注意到您的文件名以 .cu 结尾来检测您正在编译 CUDA 代码。或者,您可以传递 -x cuda。”我假设它可以使用.cpp。有谁知道我是否使用 .cpp 扩展名,我需要什么链接器参数?
    • 是的; cmake 中一流的 CUDA 支持很方便,您不必使用它。
    猜你喜欢
    • 2021-01-11
    • 1970-01-01
    • 2012-11-06
    • 2011-07-14
    • 1970-01-01
    • 2021-05-25
    • 2019-03-27
    • 2015-08-22
    • 1970-01-01
    相关资源
    最近更新 更多