调用 Surface 低级 CUDA API 的奇怪错误编译代码

Posted

技术标签:

【中文标题】调用 Surface 低级 CUDA API 的奇怪错误编译代码【英文标题】:Weird error compiling code that calls Surface low-level CUDA API 【发布时间】:2011-03-24 17:45:49 【问题描述】:

这个最小的例子:

int main() 

    struct surfaceReference* surfaceReferencePointer;
    cudaGetSurfaceReference(&surfaceReferencePointer, "surfaceReference"); 

这样编译失败:

nvcc -g -arch=sm_20 -o foo.out foo.cu

显示以下错误信息:

foo.cu(4): warning: argument of type "surfaceReference **" is incompatible with parameter of type "const surfaceReference **"
foo.cu(4): warning: argument of type "surfaceReference **" is incompatible with parameter of type "const surfaceReference **"

foo.cu: In function ‘int main()’:
foo.cu:4: error: invalid conversion from ‘surfaceReference**’ to ‘const surfaceReference**’
foo.cu:4: error:   initializing argument 1 of ‘cudaError_t cudaGetSurfaceReference(const surfaceReference**, const char*)’

我无法理解我做错了什么。我正在使用 CUDA 3.2 在 Linux Ubuntu 64 位机器上进行编译。

【问题讨论】:

您应该将指针定义为 const 你是对的!请发表您的评论作为答案,以便我接受。谢谢。 【参考方案1】:

struct surfaceReference* 指针应定义为const

int main() 

    const struct surfaceReference* surfaceReferencePointer;
    cudaGetSurfaceReference(&surfaceReferencePointer, "surfaceReference"); 

codymanix致敬,他在 cmets 中提供了正确答案。

【讨论】:

以上是关于调用 Surface 低级 CUDA API 的奇怪错误编译代码的主要内容,如果未能解决你的问题,请参考以下文章