0

In a project with many .cu files and a .h file, I have some constants defined in my main.cu like this (shown just one as example):

__device__ __constant__ unsigned int x[1]; #include "second.cu" ... some code... 

In the file second.cu I am trying to use that constant, like this:

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

But Eclipse is giving me the error: identifier "x" is undefined.

I noticed that #includes in my main.cu, like the header.h, I need to specifically add in all the .cu files again. Which produced some redefinition problems that I solved using #pragma once.

I am new to Eclipse in general, found some complains about the CDT regarding include files not being indexed. I tried the Index Rebuild/Update/Freshen/Re-resolve method that worked for some in this regard, but with no luck with my problems.

Also, tried disabling the 'heuristic resolution of includes' in Properties -> Indexer. I thought I got it for a few moments but then the error showed up again.

Any ideas to solve this problem?

1
  • Is this reported by compiler? Commented Sep 23, 2013 at 23:23

1 Answer 1

1

This is a C/C++ problem and have nothing to do with CUDA.

Generally people don't include source files like .cu .cpp .c. Only header files like .h should be included.

If you have a global variable int x need to be referenced in many source files. You could define it in one souce file as

// main.cu int x; ... 

declare it in a header file as

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

and include this header file in all the source files you will reference that variable as

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

and

// third.cu #include "main.h" void bar() { int private=x; } ... 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.