我在使用 Visual Studio 2010 时遇到了这些非常奇怪的问题。在这一点上,这种行为非常不稳定,我真的希望我不必将它用于 CUDA(我知道我不必,但很难不使用它)。
我在使用非常基本的东西时遇到的许多问题之一是头文件被多次包含。例如:
//vars.cuh
#if !defined(VARS_cuh)
#define VARS_cuh
#include <cuda.h>
#include <cuda_runtime_api.h>
int* kern_xstart, *kern_xend, *kern_ystart, *kern_yend, *kern_zstart, *kern_zend;
/* more variable definitions */
#endif
然后我将这个文件包含在我的大部分源文件中:
//source_file.cu
extern "C"{
#include "vars.cuh"
/* more includes of my own headers */
#include <cuda.h>
#include <cuda_runtime_api.h>
}
/* source file body */
VS 2010 编译器会输出如下错误:“error LNK2005: foo already defined in other_source_file_I_wrote.cu.obj”
为什么要这样做?另外,为了用一块石头杀死两只鸟,使用这种设置,我在 source_file.cu 中编写一个函数,然后在 vars.cuh 中对其进行原型设计时也遇到了问题。问题出现了 vars.cuh 看不到定义,即使我清楚地将 vars.cuh 包含在 source_file.cu 中!
谢谢!