如何在cuda中编译多个文件?

时间:2014-12-21 14:15:27

标签: cuda

我按照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>>>();
}

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手册中了解有关设备链接的更多信息。