gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:52:07 27 4
gpt4 key购买 nike

我有一个 C 项目,我想使用 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

测试文件.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 的一些设置...

任何帮助将不胜感激。

最佳答案

.cu编译并链接为 .cpp ,不是.c 。因此,您可以重命名 .c文件发送至.cpp ,或使用extern "C"在你的.cu文件。

关于使用外部变量的 C/CUDA 实现会产生链接器错误(无法解析的外部符号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14677601/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com