c - 带外部变量的c/cuda实现产生链接器错误( 未解析的外部符号)

  显示原文与译文双语对照的内容

我有一个c 项目,我想用一个cuda模块来提升。 但是,外部定义的变量不能被解析。 我正在使用微软 Visual C++ 2010 Express和CUDA工具包 5.0.

下面显示了我的最小( 非) 工作示例:

main.c:


#include"main.h"
#include <stdio.h>
#include"cuda_test.cu"

int main( int argc, const char* argv[] )
{
 testfunc();
 return 1;
}

main.h:


#ifndef main_h
#define main_h

extern float PI;

#endif

testfile.c:


#include"main.h"

float PI = 3;

cuda_test.cu:


#include"main.h"
#include <stdio.h>

void testfunc()
{
 printf("Hello from cudafile: %E", PI);
}

这将产生以下错误:


1>------ Build started: Project: cuda_min, Configuration: Debug Win32 ------
1>cuda_test.cu.obj : error LNK2001: unresolved external symbol"float PI" (?PI@@3MA)
1>D:Backupdiplomarbeitcuda_xanthoscuda_minDebugcuda_min.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

当将变量PI传递给函数testfunc时,我得到了所需的行为。 这是我在项目( 它实际上使用了cuda设备) 中做的,但是我真的不想将 20个变量传递给我的函数。

我想我错过了nvcc的一些设置。

任何帮助都会非常感激。

时间:

.cu 被编译并链接为 .cpp,而不是 .c 。 因此,你可以将 .c 文件重命名为 .cpp,或者在 .cu 文件中使用 extern"C"

...