【发布时间】:2015-07-04 06:23:03
【问题描述】:
io.cuh:
#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 编译简单的程序:
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。
在引用代码的一些小警告之后,我收到以下错误:
nvcc main.c io.o -o main nvcc 警告:“compute_10”和“sm_10” 不推荐使用架构,并且可能会在将来的版本中删除。 在 main.c:1:0 中包含的文件中:io.cuh:12:12: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘void’ global void transformToGrayKernel(rgb_image *img); ^ makefile:6: 目标 'main' 的配方失败 make: *** [main] 错误 1
【问题讨论】:
-
C 函数默认不是全局的吗?
-
@WeatherVane 在 CUDA 中,'global' 属性是在 GPU 上运行并从主机调用的函数的标签,所以我不认为它是多余的。
-
不要在 main.c 中包含包含 CUDA 的标头。 C 编译器不理解它。
-
@talonmies 我知道。 main.c 文件中没有“cuda.h”。