PyCUDA中使用std::tuple遇extern "C"链接错误,如何指定C++编译?
PyCUDA使用std::tuple编译错误的解决办法
问题根源
PyCUDA的SourceModule默认用C语言规则编译代码,而<tuple>是C标准库头文件,C编译器没法正确解析,还会触发C代码在extern "C"环境下的链接错误,也就是你遇到的error: this declaration may not have extern "C" linkage。
解决步骤
直接在创建SourceModule时,通过options参数强制指定用C++编译器编译即可,修改后的代码如下:
from pycuda.compiler import SourceModule mod = SourceModule("""#include <tuple>""", options=["--compiler-options", "-std=c++11"])
关键参数说明
--compiler-options:用来给CUDA编译器(nvcc)传递编译参数-std=c++11:指定以C11标准编译,也可以根据需求换成更高版本,比如c++17,这样编译器就会以C模式处理你的代码
额外注意事项
- 核函数代码不用再包裹在
extern "C"块里,用C++编译模式后,PyCUDA会自动处理函数名修饰的问题 - 现在也能正常使用其他C++标准库特性,比如
std::vector、std::pair之类的
内容的提问来源于stack exchange,提问作者janovak
相关产品推荐
相关产品推荐

