繁体   English   中英

PyCuda C++ kernel“错误:此声明可能没有外部“C”链接”

[英]PyCuda C++ kernel "error: this declaration may not have extern "C" linkage"

我尝试在我的 kernel 代码中使用std::tuple ,但收到很多error: this declaration may not have extern "C" linkage指向utilitytuple的外部“C”链接错误

它抱怨包含。 以下是我的重述。

from pycuda.compiler import SourceModule
mod = SourceModule("""#include <tuple>""")

我是否需要在我的 kernel 代码或 Python 代码中做一些特殊的事情来指定我想使用 C++ 编译器?

Cuda 版本:11.8

PyCuda 版本:2022.2.1

我是否需要在我的 kernel 代码或 Python 代码中做一些特殊的事情来指定我想使用 C++ 编译器?

明确地说,您使用的是 C++ 编译器。 但是 PyCUDA 会自动将您传递的代码包装到extern “C”中的SourceModule实例中,除非您明确告诉它不要这样做:

除非 no_extern_c 为 True,否则给定的源代码被包装在extern “C” { … }中以防止 C++ 名称混淆。

从 C++ 的角度来看,根本原因是类型和函数的模板化实例无法通过 C 链接解析,因此出现错误。

但是,即使在您解决了该问题之后,也要做好失望的准备。 CUDA 支持很多 C++ 语言特性,但它不支持标准库,你不能在 kernel 代码中使用std::tuple NVIDIA 确实提供了他们自己的(非常有限的) C++标准库的重新实现,并且它确实有一个基本的元组类型。 可能对你有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM