未定义符号:导入 pybind11 绑定时的 _ZN3a13A

Posted

技术标签:

【中文标题】未定义符号:导入 pybind11 绑定时的 _ZN3a13A【英文标题】:Undefined Symbol: _ZN3a13A when importing pybind11 bindings 【发布时间】:2018-11-30 20:38:18 【问题描述】:

我正在尝试为现有的 cmake 项目创建 pybind11 绑定。 CMakeLists.txt 文件看起来像 the one in the tutorial。该项目构建没有错误,但是,当尝试在 ipython 中导入模块时,出现以下错误:

~/workspace/a/build/pya.cpython-35m-x86_64-linux-gnu.so: undefined symbol: _ZN3a13FooC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

试图解决它:它似乎与工具链有关(this issue 看起来相似)。我已经安装了 gcc 6.5.0cmake 3.12.0

【问题讨论】:

您似乎没有正确链接某些内容。不幸的是,C++ 中的名称有时不太具有描述性,但有时您会认出部分名称来提示您未链接的内容。为了能够帮助您,我们需要一个最小的可重现示例。 【参考方案1】:

这比必要的更难回答,链接器错误消息被混淆了。使用online demangler 查看链接器找不到的纯文本符号名称。请务必复制/粘贴真正的损坏符号。

与错误消息有些相似的有效重整名称将是_ZN1a3FooC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE。哪个对a::Foo::Foo(const std::string&) 进行解码。

换句话说,您为 Foo 类声明了一个构造函数,但忘记编写它。相当标准的错误。在this Q+A 中详细了解这些链接器错误。

【讨论】:

以上是关于未定义符号:导入 pybind11 绑定时的 _ZN3a13A的主要内容,如果未能解决你的问题,请参考以下文章

简单的 pybind11 模块失败,没有命名模块

_IO_FILE 的 Pybind11 文件指针包装器

未解决的参考:将数据绑定导入 MainActivity 时的数据绑定

Pybind11:如何为结构成员变量分配默认值?

PyQt5 QtQuick 错误 - “libQt5Network 未定义符号:_Z24qt_subtract_from_timeoutii”

导入错误和未定义符号:dgesv_ 使用 PIP 安装 CVXPY 时出错