个人博客中有本文原文https://whatghost.github.io/2020/07/18/cuda-rdc-compile/
如果喜欢可以访问个人博客WhatGhost.github.io,会有更多分享内容
Unresolved extern function错误
编译过程中遇到Unresolved extern function xxxxxx 错误,一般导致这个错误的原因是在__global__和一些__device__函数放在了分开编译的不同文件中,并且在__global__中调用了这些__device__函数。
解决的方法也很简单,有两种解决方法
- 将二者放到同一文件中进行编译
- 通过添加-dc标志来显示启用relocatable device code模式,-dc选项等价于 -rdc=true -c
补充问题
在实际操作中按照文档中如下的的加上-dc进行编译
nvcc -arch=sm_35 -dc xx1.cu -o xx1.o
nvcc -arch=sm_35 main.cu xx1.o -o main
还是会报错Unresolved extern function,没能解决问题
后来在编译main.cu时添加 -rdc=true,不再报错,问题解决
但是文档中都只是说添加-dc就可以,为什么还需要再添加-rdc暂时还没搞明白。
nvcc -arch=sm_35 -dc xx1.cu -o xx1.o
nvcc -arch=sm_35 -rdc=true main.cu xx1.o -o main