如何正确 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.cu
和 myFile.cpp
中包含你的 header:
#include <cosFutStr.h>
这样,您将在 myFile.cu
中拥有函数定义,并且您将能够从 myFile.cpp
调用 myFunction
。
正如 talonmies 在评论中所说,假设您将使用 C++ 链接编译您的源代码,那么所有内容都将以正确的方式链接,而无需使用 extern "C"
。
但我认为这更像是一个 C++ 问题,而不是 CUDA 问题。
我正在使用 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.cu
和 myFile.cpp
中包含你的 header:
#include <cosFutStr.h>
这样,您将在 myFile.cu
中拥有函数定义,并且您将能够从 myFile.cpp
调用 myFunction
。
正如 talonmies 在评论中所说,假设您将使用 C++ 链接编译您的源代码,那么所有内容都将以正确的方式链接,而无需使用 extern "C"
。
但我认为这更像是一个 C++ 问题,而不是 CUDA 问题。