CUDA编程时 undefined reference to ***报错

背景:
最近在看一篇kyber GPU实现的论文,有些细节不是很明白,就想将源码跑起来调试一下。源码应该是直接敲nvcc命令行运行的,嫌太麻烦,于是想改成CMake项目。自己用nvcc命令跑过可以运行,所以确认源码是没有什么问题的,加了CMakeList后报错undefined reference to ***, 如下:
在这里插入图片描述
解决方法:
CMakeList中加入:

set(CMAKE_CUDA_SEPARABLE_COMPILATION ON)

原理:
这个 CMake 选项用于控制是否启用 CUDA 源文件的可分离编译(separable compilation)功能。
CUDA 编译过程分为两个阶段 - device 部分和 host 部分。当启用可分离编译时,CUDA 编译器会为每个 CUDA 内核生成单独的目标文件。这些目标文件可以独立链接,提高编译和链接的效率。
如果没有启用可分离编译,CUDA 编译器在生成目标文件时,会将所有的 device 代码和 host 代码全部打包到一个目标文件中。在链接阶段,如果有某些 CUDA 内核的符号没有被正确解析,就会出现 undefined reference to 的错误。
CUDA 程序通常需要链接 CUDA 运行时库,比如 cudart。如果没有正确设置这些依赖库,同样会导致链接错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值