![](/img/trans.png)
[英]PyCUDA either fails to find function in NVIDIA source code or throws 'may not have extern “C” Linkage' error
[英]PyCuda C++ kernel "error: this declaration may not have extern "C" linkage"
我尝试在我的 kernel 代码中使用std::tuple
,但收到很多error: this declaration may not have extern "C" linkage
指向utility
和tuple
的外部“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.