python - add_cuda_library 输出:未解析的外部函数
问题描述
我正在尝试将一些 .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
正确链接文件的要求。
解决方案
不再需要以这种方式链接到 cuda 库。您可能可以使用enable_language(CUDA)
,它将负责链接。
您可以查看本教程或Nvidia 开发博客中的此示例
推荐阅读
- r - 用空格 pt2 替换所有分号
- python - 如何为两个矩阵创建卷积函数?
- c++ - 向 vulkan 管道添加额外的 UBO 会停止所有几何渲染
- electron - 无法在 mac 和 windows 上为电子 5.0.10 安装 node-libcurl
- c# - 如何在 C# 中插入具有某些因素的数组?
- url-rewriting - IIS 10 - URL 重写规则以阻止对 servername 的直接请求,但来自 SOAPUI 的请求除外
- spring-boot - 服务同步问题
- php - Generate Word File in Laravel PHPWord - problem with add blade
- outlook - Office.context.mailbox.item.body.getAsync() 上的 OSF.DDA.Error 9020
- java - How to set `killSoftly` for a specific Jenkins job?