链接器错误-在ubuntu中找不到CMake和Cuda 10.1的lcudart
Linker error -lcudart not found with CMake and Cuda 10.1 in ubuntu
我正试图用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_LIBRARIES
和CUDA_VERSION
都为空。
我的CMake是3.15。
我错过什么了吗?
当您在cmake中使用CUDA一流语言支持时,它希望您使用.cu
扩展名命名任何与CUDA相关的文件。将main.cpp
重命名为main.cu
你在用棍子吗?简单的cudaGetDeviceCount
调用不需要它。
也就是说,那条version unknown
线令人担忧。通常/usr/local/cuda
是一个符号链接,这意味着什么?检查以确保它指向cuda-10.1。如果可以,那么您可能需要重新安装CUDA Toolkit
相关文章:
- 编译时未启用intel oneApi CUDA支持
- 在cuda线程之间共享大量常量数据
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- CUDA内核和数学函数的显式命名空间
- CUDA:统一内存和指针地址的更改
- 调试 CUDA MMU 故障
- 使用 CUDA 和纹理进行图像减法
- 将 2D 推力::d evice_vector 复矩阵传递给 CUDA 内核函数
- 编译 CUDA 与数学函数的叮当
- 为什么 CUDA 不会导致C++代码加速?
- 如何防止 CUDA-GDB 中的<优化输出>值
- 通过Python Distutils(用于Python C扩展)使用可重定位的设备代码编译CUDA代码
- CUDA三角函数中的数学保证
- CUDA 使用共享内存平铺 3D 卷积实现
- CUDA:cudaMallocManage处理退出吗?
- Opencv 加速与 CUDA 在 C++.
- Cuda:具有位集数组的 XOR 单位集
- 用于构建 cuda .so 文件(共享库)的生成文件
- 链接器错误-在ubuntu中找不到CMake和Cuda 10.1的lcudart