未定义符号:导入 pybind11 绑定时为 _ZN3a13A
Undefined Symbol: _ZN3a13A when importing pybind11 bindings
我正在尝试为现有的 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
正在尝试解决:好像跟toolchain有关(this issue貌似)。我已经安装了 gcc 6.5.0 和 cmake 3.12.0。
这比必要的更难回答,链接器错误消息被混淆了。使用 online demangler 查看链接器无法找到的明文符号名称。确保 copy/paste 真正的错位符号。
有点类似于错误消息的有效的错位名称是 _ZN1a3FooC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
。哪个 demangles 到 a::Foo::Foo(const std::string&)
.
换句话说,您为 Foo class 声明了构造函数,但忘记编写它。很标准的错误。 this Q+A.
中有关这些链接器错误的更多信息
我正在尝试为现有的 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
正在尝试解决:好像跟toolchain有关(this issue貌似)。我已经安装了 gcc 6.5.0 和 cmake 3.12.0。
这比必要的更难回答,链接器错误消息被混淆了。使用 online demangler 查看链接器无法找到的明文符号名称。确保 copy/paste 真正的错位符号。
有点类似于错误消息的有效的错位名称是 _ZN1a3FooC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
。哪个 demangles 到 a::Foo::Foo(const std::string&)
.
换句话说,您为 Foo class 声明了构造函数,但忘记编写它。很标准的错误。 this Q+A.
中有关这些链接器错误的更多信息