更新: 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:找到一个或多个多重定义的符号
答案 0 :(得分:2)
将网格移动到main.cpp。将它传递给lineCuda.cu。问题解决了。
更新: main.h
typedef struct
{
float x;
float y;
float z;
}vec3;
const int sizeOfGrid = 20000;
的main.cpp
#include "main.h"
vec3 *grid[sizeOfGrid];//assume initialized
extern "C" void cudaTranslate(vec3 *x);
void display()
{
cudaTranslate(grid);
}
答案 1 :(得分:0)
通过在任何地方删除extern "C"
并使用C ++绑定,可以使这更简单。
话虽如此,您实际上有一个乘法定义的符号grid
,因为您将文件main.h包含在两个翻译单元中。将行vec3 *grid[sizeOfGrid]
移动到main.cpp。