在一个包含许多.cu文件和.h文件的项目中,我在main.cu中定义了一些常量,如下所示(仅显示一个例子):
__device__ __constant__ unsigned int x[1];
#include "second.cu"
... some code...
在文件second.cu中我试图使用该常量,如下所示:
cudaMemcpyToSymbol(x, y, sizeof(xx));
但是Eclipse给了我错误:标识符“x”未定义。
我注意到#includes在我的main.cu中,就像header.h一样,我需要再次专门添加所有.cu文件。这产生了一些我使用#pragma once
解决的重新定义问题。
我是Eclipse的新手,发现一些关于CDT的抱怨没有被索引的包含文件。我尝试了Index Rebuild / Update / Freshen / Re-resolve方法,对于这方面的一些人有用,但我的问题没有运气。
此外,尝试禁用“属性”中的“启发式解析包含” - >索引。我以为我得到了一会儿然后错误又出现了。
有什么想法可以解决这个问题吗?
答案 0 :(得分: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;
}
...