【问题标题】:How to properly link created functions between cuda and cpp files?如何正确链接 cuda 和 cpp 文件之间创建的函数?
【发布时间】:2019-11-09 18:00:47
【问题描述】:

我正在编写一个 MATLAB .mex 库来运行 c++ 和 CUDA。在 .cu.cpp 文件中我必须写:

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

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

我的问题是:有没有办法创建一个头文件来链接两个文件中的这个函数,这样我就不需要在这两个文件中显式写extern "C"

【问题讨论】:

  • 鉴于所有内容都将使用 C++ 链接进行编译,因此您根本不需要使用 extern "C",所以我真的不明白您在这种情况下的问题是什么
  • 我刚刚从一个工作示例中复制了extern "C"(它正在工作)。我只是按照@MariaChiara 的回答做了并且工作正常。

标签: c++ visual-studio cuda mex


【解决方案1】:

我建议你创建一个头文件,例如调用它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 中都包含你的标题:

#include <cosFutStr.h>

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

【讨论】:

  • 成功了!之前,我用extern "C"在头文件上写函数声明,VS根本没有编译。
  • 如果您同意,我认为您应该编辑您的问题以删除不相关的标签。 (IMO 肯定是 mex,也可能是 cuda,因为它们不是您问题的重点)
  • 虽然没有直接相关的话题,但说不定以后会有人有同样的问题,可以达到这个话题。我见过一些人将extern "C" 与 mex 文件和 CUDA 一起使用。所以,这可能对他们有帮助。
猜你喜欢
  • 2017-03-02
  • 1970-01-01
  • 2012-08-30
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多