1
//Header file A.h
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
class A
{
   __host__ __device__ void move();
}

//cu file A.cu
#include "A.h"
{
   __host__ __device__ void A::move()
   {
      ...
   }
}

A.cu从另一个文件调用文件中定义的方法时.cu,我收到以下错误:

External calls are not supported (found non-inlined call to ...),

我正在使用sm_10编译选项。

4

1 回答 1

2

您需要单独编译。单独编译需要至少具有计算能力2.0且至少 CUDA 5.0 的卡。

引用 CUDA 5.0 发布亮点:

__device__现在可以使用 NVCC 单独编译和链接所有函数。这允许创建函数的闭源静态库__device__以及这些库调用用户定义的__device__回调函数的能力。链接器支持被认为是此版本中的 BETA 功能。

CUDA 编译器驱动程序 NVCC 参考指南的第 7 章描述了单独的编译。

对于那些感兴趣的人,在 NVIDIA 论坛中有一个关于单独编译的非常好的帖子,请参阅

如何使用 cuda 5.0 为设备功能创建静态库?

于 2013-09-19T13:49:53.343 回答