我按照gcc
的方式做到了 nvcc a.cu ut.cu
但编译器显示
ptxas fatal : Unresolved extern function '_Z1fi'
只有当函数是__device__函数时才会出现问题。
[File ut.h]
__device__ int f(int);
[File ut.c]
#include "ut.h"
__device__ int f(int a){
return a*a;
}
[File a.cu]
#include "ut.h"
__global__ void mk(){
f(5);
}
int main(){
mk<<<1,1>>>();
}
答案 0 :(得分:6)
当__device__
或__global__
函数在另一个翻译单元中调用__device__
函数(或__global__
函数时,在动态并行性的情况下)(即文件),然后有必要使用设备链接。要使用简单的编译命令启用设备链接,只需添加-rdc=true
开关:
nvcc -rdc=true a.cu ut.cu
这应解决问题。
请注意,在您的编译命令中列出“ut.cu”但在您的问题中显示“ut.c”,我认为应该是文件“ut.cu”。如果没有,您还需要将文件名从“ut.c”更改为“ut.cu”。
您可以在nvcc手册中了解有关设备链接的更多信息。