2013-09-20 2 views
0

В проекте с большим количеством файлов .CU и .h файл, я некоторые константы определены в моем main.cu, как это (показана только один в качестве примера):Nsight Затмение 5,5 идентификатор не определен

__device__ __constant__ unsigned int x[1]; 

#include "second.cu" 

... some code... 

в файле second.cu я пытаюсь использовать эту константу, как это:

cudaMemcpyToSymbol(x, y, sizeof(xx)); 

Но затмение дает мне ошибку: идентификатор «х» не определено.

Я заметил, что #includes в моем main.cu, как header.h, мне нужно дополнительно добавить во все файлы .cu снова. Что вызвало некоторые проблемы переопределения, которые я решил с помощью #pragma once.

Я новичок в Eclipse в целом, нашел некоторые жалобы на CDT относительно включения файлов, которые не индексируются. Я попробовал метод перестроить индекс/обновить/обновить/повторно разрешить, который работал для некоторых в этом отношении, но не повезло с моими проблемами.

Кроме того, попытался отключить «эвристическое разрешение включений» в свойствах -> индексирование. Я думал, что у меня это получилось на несколько мгновений, но затем снова появилась ошибка.

Любые идеи для решения этой проблемы?

+0

Сообщено ли это компилятором? – Eugene

ответ

1

Это проблема с C/C++ и не имеет никакого отношения к CUDA.

Обычно люди не включают исходные файлы, такие как .cu .cpp .c. Должны быть включены только заголовочные файлы, такие как .h.

Если у вас есть глобальная переменная int x, необходимо ссылаться во многих исходных файлах. Вы можете определить его в одном соусе файл, как

// main.cu 
int x; 
... 

объявить его в файле заголовка, как

// main.h 
extern int x; 
... 

и включают этот файл заголовка во всех исходных файлах вы будете ссылки эта переменная как

// second.cu 
#include "main.h" 
void foo() { 
    int local=x; 
} 
... 

и

// third.cu 
#include "main.h" 
void bar() { 
    int private=x; 
} 
... 
Смежные вопросы