我正在尝试为现有的 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.0 和 cmake 3.12.0 。
答案 0 :(得分:5)
这比必要的答案难解决,链接器错误消息模糊不清。使用online demangler查看链接器找不到的纯文本符号名称。请确保复制/粘贴真实变形的符号。
在某种程度上类似于错误消息的有效错误名称将为_ZN1a3FooC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
。哪个会与a::Foo::Foo(const std::string&)
发生冲突。
换句话说,您为Foo类声明了一个构造函数,但忘记编写它。相当标准的错误。有关this Q+A中的这些链接器错误的更多信息。