我有几个.cpp文件和几个.h文件。如果我使用nvcc而不是g ++编译它们,一切都很好。现在,当我开始(在main.cpp中)在设备上分配内存,即
cudaMalloc( (void**)&_a, _DSIZE * sizeof(float) )
然后问题就开始了。我试图将扩展名更改为.cu,但它甚至更糟。
我得到的错误:
mylib.h(39): error: invalid redeclaration of type name "int2" /usr/local/cuda/bin/../include/vector_types.h(402): here
mylib.h(43): error: invalid redeclaration of type name "int3" /usr/local/cuda/bin/../include/vector_types.h(406): here
mylib.h(47): error: invalid redeclaration of type name "float3" /usr/local/cuda/bin/../include/vector_types.h(434): here
显然,int2,int3,float3等是我自己的重新声明,它们位于mylib.h文件中并且是全局的。
我也收到很多警告:
mylib.h(128): warning: use of a type with no linkage to declare a function
mylib.h(129): warning: use of a type with no linkage to declare a function
我做错了什么?我一直在使用.cu文件,但我认为这不是真正必要的扩展......
重新定义,警告关闭但仍然是错误:
/ usr / bin / ld:FSPB_kernel_Jelen.o:错误的reloc符号索引(0x90> = 0x1e),用于“。text”部分中的偏移量0xa0100 FSPB_kernel_Jelen.o:无法读取符号:值不正确 collect2:ld返回1退出状态 make: * [FSPB]错误1
有什么想法吗?
答案 0 :(得分:4)
显然,int2,int3,float3等是我自己的重新声明,它们位于mylib.h文件中并且是全局的。
看起来CUDA使用这些名称,现在你有一个名字冲突。选择您使用的库未采用的名称,或者更好的是,为代码使用名称空间。 (最好:两者都做)