首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法将内核的原型放在标头中

无法将内核的原型放在标头中
EN

Stack Overflow用户
提问于 2015-04-25 16:45:23
回答 1查看 309关注 0票数 0

io.cuh:

代码语言:javascript
复制
#ifndef IO_CUH
#define IO_CUH

#include <cuda.h>

typedef struct{
    unsigned width;
    unsigned height;
    unsigned char *image; //RGBA
}rgb_image;

__global__ void transformToGrayKernel(rgb_image *img);
void decodeTwoSteps(const char* filename, rgb_image *img);
void encodeOneStep(const char* filename, rgb_image *img);
void processImage(const char *filename, rgb_image *img);

#endif // IO_CUH

我试图使用以下makefile编译简单的程序:

代码语言:javascript
复制
lodepng.o: lodepng.h
        cc -c lodepng.c -o lodepng.o
io.o: io.cuh lodepng.o
        nvcc -c io.cu -o io.o
main: io.o
        nvcc main.c io.o -o main

“main.c”使用io.cu中的一个函数,该函数依赖于lodepng.c。

在引用代码的一些次要警告之后,我得到了以下错误:

-o主nvcc警告:不推荐使用“compute_10”和“sm_10”架构,并可能在将来的版本中删除。在main.c:1:0: io.cuh:12:12: error: expected‘=’‘,’asm‘或’属性‘之前包含在’全局 void transformToGrayKernel‘(rgb_image*img)之前的文件中;^ makefile:6:目标' main’失败的配方:*主要错误1

EN

Stack Overflow用户

回答已采纳

发布于 2015-04-25 17:37:03

这个错误是由关键词__global__引起的,而不是您内核的原型。

这是因为编译器nvcc将解释它的输入文件,并选择相应的规则来编译它。虽然您使用nvcc编译"main.c",但它将被视为C源文件,而不是CUDA源代码。因此,编译器在编译文件"main.c“时无法识别CUDA关键字__global__

您可以将文件类型从"main.c“更改为"main.cu",并将其视为CUDA源代码。然后编译器可以识别关键字__global__

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29867956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档