0

在一个包含许多 .cu 文件和一个 .h 文件的项目中,我在 main.cu 中定义了一些常量,如下所示(仅显示一个作为示例):

__device__ __constant__ unsigned int x[1];

#include "second.cu"

... some code...

在文件 second.cu 中,我尝试使用该常量,如下所示:

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

但是 Eclipse 给了我错误:标识符“x”未定义。

我注意到我的 main.cu 中的#includes,就像 header.h 一样,我需要再次专门添加所有 .cu 文件。这产生了一些我使用#pragma once.

一般来说,我是 Eclipse 的新手,发现一些关于 CDT 的关于包含文件没有被索引的抱怨。我尝试了在这方面对某些人有用的 Index Rebuild/Update/Freshen/Re-resolve 方法,但我的问题没有运气。

此外,尝试在“属性”->“索引器”中禁用“包含的启发式解析”。我以为我得到了它,但随后错误再次出现。

有什么想法可以解决这个问题吗?

4

1 回答 1

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;
}
...
于 2013-09-21T04:08:39.290 回答