【发布时间】:2011-07-05 02:49:46
【问题描述】:
更新: main.h
typedef struct
{
float x;
float y;
float z;
}vec3;
const int sizeOfGrid = 20000;
vec3 *grid[sizeOfGrid];//assume initialized
main.cpp
#include "main.h"
extern "C" void cudaTranslate(vec3 *x);
void display()
{
cudaTranslate(grid);
}
lineCuda.cu
#include <stdio.h>
#include <assert.h>
#include <cuda.h>
#include "main.h"
extern "C" void cudaTranslate(vec3 *x)
{
}
得到:
main.obj : 错误 LNK2005: "struct vec3 * * grid" (?grid@@3PAPAUvec3@@A) 已在 lineCuda.obj 中定义
致命错误 LNK1169:发现一个或多个多重定义符号
【问题讨论】:
-
您尝试了什么,到目前为止是如何失败的?我看不出你目前的方法有任何明显的问题。
-
您应该将
struct定义放在标题中,并将#include放在.cpp和.cu文件中。 -
@Tomalak:我不确定发帖人是否意识到他们应该在两个文件中都包含
struct定义;这就是我要指出的。 -
您对
cudaTranslate参数类型的声明不匹配。 (一个是vec3*,另一个是vec3。) -
@Ninja:尝试制作
sizeOfGridstatic。我不记得int常量是否是自动的(我想是的)。