CUDA недопустимая переопределение int2 - PullRequest
1 голос
/ 16 июня 2011

У меня есть несколько файлов .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: неверный индекс символа перемещения (0x90> = 0x1e) для смещения 0xa0100 в разделе `.text ' FSPB_kernel_Jelen.o: не удалось прочитать символы: неверное значение collect2: ld вернул 1 статус выхода make: * [FSPB] Ошибка 1

Есть идеи?

1 Ответ

4 голосов
/ 16 июня 2011

Очевидно, что int2, int3, float3 и т. Д. Являются моими собственными декларациями, которые находятся в файле mylib.h и являются глобальными.

Похоже, CUDA использует эти имена, итеперь у вас есть столкновение имен.Выберите имена, которые не используются библиотеками, которые вы используете, или, что еще лучше, используйте пространство имен для вашего кода.(Лучше: сделай и то, и другое)

...