add_cuda_library输出:未解析的外部函数
add_cuda_library outputing: Unresolved extern function
我正在尝试将一些.cu源文件编译成python模块。只要不超过一个文件,就可以正常工作。 CMakeLists.txt如下所示:
find_package(CUDA)
find_package(PythonLibs 3.7 REQUIRED)
find_package(pybind11)
file(GLOB_RECURSE sources ${SRC}/launcher.cu)
cuda_add_library(main SHARED ${SRC}/module.cpp ${sources})
target_link_libraries(main ${PYTHON_LIBRARIES} cudart)
set_target_properties(main PROPERTIES CUDA_SEPERABLE_COMPILATION ON)
上面的文件将整齐地编译一个python模块
但是当${sources}
包含多个 .cu 文件时,链接就不会发生。我收到以下错误:
[ 16%] Building NVCC (Device) object CMakeFiles/main.dir/src/main_generated_launcher.cu.o ptxas fatal : Unresolved extern function '_ZN5StateIdE16WithinBoundariesEii' CMake Error at main_generated_launcher.cu.o.cmake:279 (message): Error generating file [...]/DNA_PredatorPrey/build/CMakeFiles/main.dir/src/./main_generated_launcher.cu.o
"未解析的外部功能点"是链接器应该在另一个源文件中找到的函数。
当对完全相同的文件组使用add_executable(....)
而不是cuda_add_library
时,它将编译成一个有效的可执行文件。
所以我正在寻找cuda_add_library
需要什么才能正确链接文件。
既然你提到你直接使用LANGUAGES CUDA
.您可以只使用add_library()
而不是add_cuda_library()
,因为它被 cmake 支持作为第一语言。我想一些使用旧版本 cmake(<3.8?( 的项目需要类似CUDA_ADD_LIBRARY CUDA_ADD_EXECUTABLE
的东西。但是作为第一语言,你可以把它看作是一个普通的c项目。
不再需要以这种方式链接到 cuda 库。您可能可以使用enable_language(CUDA)
,它将处理链接。
您可以查看本教程或 Nvidia 开发博客中的此示例
相关文章:
- 在函数内创建的对象的范围 - 如果在函数外部存储和访问引用,它们是否有效?
- C++指针无法在函数外部传递值和分段错误(核心转储)错误
- C++:函数外部的超时功能
- 如何在函数外部访问函数中局部变量的值?
- 在成员函数外部封闭类的定义中需要默认成员初始值设定项
- 以延长构造函数外部 QT 对象的生存期
- 全局静态变量不"staying defined"函数外部
- C++ 函数外部丢失的指针对象
- 向量大小在构造函数外部恢复为 0
- 删除函数外部的实例化对象
- 在函数外部编写代码
- 为什么我不能添加到方法/函数外部的 ostringstream
- 用于在方法或函数外部声明的变量的内存
- SDL2 在函数外部加载字体会引发错误
- 如何在具有多态性的函数外部创建对象
- 在函数外部声明对象,将其作为引用传递,然后在函数内部创建它
- 向量未在函数C++外部更新
- 访问函数外部的堆栈对象
- 在c++中访问函数外部的数组
- 如何更新函数外部的数组(指向指针)