我正在尝试在 C 项目中包含一些 CUDA 代码。为此,我将 CUDA 源(.cu 文件)编译为静态库(.lib,我正在 Windows 中开发)。然后我希望在这个静态库中链接到我的 C 项目。但是,我的链接器抱怨这一步,我相信这是因为 C/C++ 链接问题。我得到的具体错误如下所示:
Undefined symbol '_cudaMallocHost@8' referenced in "cufft object file.lib".
我正在使用 CUDA 5.0,并且正在使用 Visual Studio 10 在 Windows 7 机器上编写和编译 CUDA 源代码。
首先,我有一个 .cu 源文件,它可以编译成静态库(“cufft object file.lib”)就好了。我把整个东西都包了进去extern C { }
。它看起来像这样:
extern "C" {
#include <cuda.h>
#include <cufft.h>
int myCUDAfunction()
{
//Some CUDA code
}
}
为此,我制作了一个头文件,其中包含在 .cu 源(“myCUDAheader.h”)中定义的函数列表,其内容只是一系列函数原型:
int myCUDAfunction();
ETC
最后,在我的 C 项目中,我添加了静态库并包含头文件。
在我开始在 CUDA 源 .cu 文件中声明函数之前extern "C"
,链接器抱怨缺少这些函数的符号。它们现在必须正确编译为 C 链接,但实际的 CUDA 函数(例如cudaMalloc
)似乎仍然具有 C++ 链接。我该如何解决这个问题?