如何正确 link 在 cuda 和 cpp 文件之间创建函数?

How to properly link created functions between cuda and cpp files?

我正在使用 C++ 和 CUDA 将 MATLAB .mex 库编写到 运行。在 .cu.cpp 文件中我必须写:

extern "C" void myFunction(float* variable1,float* variable2);

用Visual Studio 2015编译。myFunction的定义在.cu文件中,我在中调用它.cpp。它已经在工作了,但是我想更好地组织它,以便将来更容易修复一些东西。

我的问题是:有没有办法在两个文件中为link这个函数创建一个头文件,这样我就不需要显式地写extern "C" 在他们两个?

我建议您创建一个 header 文件,例如将其命名为 myFile.h,在其中放置函数声明 only:

void myFunction(float* variable1,float* variable2);

然后在你的 myFile.cu 中放置函数定义:

void myFunction(float* variable1,float* variable2){
    std::cout << "Hi! I'm a function!" << std::endl;
}

最后你必须在 myFile.cumyFile.cpp 中包含你的 header:

#include <cosFutStr.h>

这样,您将在 myFile.cu 中拥有函数定义,并且您将能够从 myFile.cpp 调用 myFunction。 正如 talonmies 在评论中所说,假设您将使用 C++ 链接编译您的源代码,那么所有内容都将以正确的方式链接,而无需使用 extern "C"。 但我认为这更像是一个 C++ 问题,而不是 CUDA 问题。