CUDA编译器不会在同一个项目中编译C文件

时间:2015-04-28 13:55:54

标签: c visual-studio-2013 cuda compiler-errors

我有main.cu个文件,其中包含test.h test.c的标题,所有三个文件都在同一个项目中。

test.h代码:

typedef struct {
    int a;
} struct_a;

void a(struct_a a);

test.c代码:

void a(struct_a a) {
    printf("%d", a.a);
}

main.cu代码:

struct_a b;
b.a=2;
a(b);

构建项目时的输出:

"nvcc.exe" -gencode=arch=compute_20,code=\"sm_20,compute_20\" --use-local-env --cl-version 2013 -ccbin "CUDA\v7.0\include" -I "CUDA\v7.0\include"  -G   --keep-dir Debug -maxrregcount=0  --machine 32 --compile -cudart static  -g   -DWIN32 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd  " -o Debug\main.cu.obj "CudaTest\CudaTest\main.cu" 
1>  main.cu
1>  test.c

构建错误:

Error   1   error LNK2019: unresolved external symbol "void __cdecl a(struct struct_a)" (?a@@YAXUstruct_a@@@Z) referenced in function _main

如果我在test.c中加入test.h而不是main.cu,那就可以了。 我试图单独编译test.c,我猜CUDA编译器不包含/ compile / link(?)test.c文件?

1 个答案:

答案 0 :(得分:1)

正如talonmies所提到的,CUDA使用C ++链接。您需要在extern "C"中添加test.h限定符到函数声明:

#ifdef __cplusplus
extern "C"
#endif
void a(struct_a a);

请参阅In C++ source, what is the effect of extern "C"?了解相关信息。