Unresolved extern function错误

编译过程中遇到Unresolved extern function xxxxxx 错误,一般导致这个错误的原因是在__global__和一些__device__函数放在了分开编译的不同文件中,并且在__global__中调用了这些__device__函数。

解决的方法也很简单,有两种解决方法

  • 将二者放到同一文件中进行编译
  • 通过添加-dc标志来显示启用relocatable device code模式,-dc选项等价于 -rdc=true -c

补充问题

在实际操作中按照文档中如下的的加上-dc进行编译

1
2
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暂时还没搞明白。

1
2
nvcc -arch=sm_35 -dc xx1.cu -o xx1.o
nvcc -arch=sm_35 -rdc=true main.cu xx1.o -o main