Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 链接器错误-在ubuntu的CMake和Cuda 10.1中找不到lcudart_C++_Cmake_Cuda_Clang - Fatal编程技术网

C++ 链接器错误-在ubuntu的CMake和Cuda 10.1中找不到lcudart

C++ 链接器错误-在ubuntu的CMake和Cuda 10.1中找不到lcudart,c++,cmake,cuda,clang,C++,Cmake,Cuda,Clang,我试图用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-x

我试图用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\u CUDA\u TOOLKIT\u INCLUDE\u目录的输出为/usr/local/CUDA/targets/x86\u 64-linux/INCLUDE,但
CUDA\u库
CUDA\u版本
均为空

我的成绩是3.15分


我遗漏了什么吗?

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

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


这就是说,
版本未知
行与此有关。通常
/usr/local/cuda
是一个符号链接,它指向什么?检查以确保其指向cuda-10.1。如果可以,那么您可能需要重新安装CUDA工具包

您当然需要cudart来拨打cudaGetDeviceCount电话。谢谢Michael和Robert。在我将文件扩展名更改为.cu之后,它就可以工作了。但是,根据这个页面,“Clang发现您正在编译CUDA代码,注意到您的文件名以.cu结尾。或者,您可以传递-x CUDA。”我假设可以使用.cpp。有人知道如果我使用.cpp扩展名,我需要什么链接器参数吗;cmake中一流的CUDA支持非常方便,您无需使用它。