CUDA无效重新声明int2

时间:2011-06-16 13:50:28

标签: c++ porting cuda

我有几个.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

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

  

显然,int2,int3,float3等是我自己的重新声明,它们位于mylib.h文件中并且是全局的。

看起来CUDA使用这些名称,现在你有一个名字冲突。选择您使用的库未采用的名称,或者更好的是,为代码使用名称空间。 (最好:两者都做)