使用外部变量的C / CUDA实现会产生链接器错误(未解析的外部符号)

时间:2013-02-03 21:39:13

标签: c visual-c++ cuda

我有一个C-Project,我想用CUDA模块来提升它。但不知何故,外部定义的变量无法解决。我使用的是Microsoft Visual C ++ 2010 Express和CUDA Toolkit 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:\Backup\diplomarbeit\cuda_xanthos\cuda_min\Debug\cuda_min.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

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

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

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