使用 pybind11 绑定 C++ 库 - 导入错误

Binding a C++ library using pybind11 - ImportError

提问人:AAUDI 提问时间:11/8/2023 最后编辑:AAUDI 更新时间:11/9/2023 访问量:81

问:

我正在尝试使用 pybind11 绑定 c++ 库。 编译效果很好,但是当我尝试将 .so 文件导入 python 文件时出现错误:

from project_pybind11 import *

我有这个错误:

from project_pybind11 import *
ImportError: generic_type: type "class_derived" referenced unknown base 
type "NAMESPACE::class_derived"

你知道这个错误的根源吗?或我如何获取有关此错误的更多详细信息或信息。

我以这种方式绑定我的班级:

  PYBIND11_MODULE(project_pbind11,m) {
    py::class_<Pyclass_derived, NAMESPACE::class_derived, NAMESPACE::class_base>(m, "class_derived")
    .def(py::init<>())
    .def(py::init<const NAMESPACE::S_UINT32>(), py::arg("classnameId"))
    .def("method1", &Pyclass_derived::method1);
    .....;
  }

我的类.cpp是:

namespace NAMESPACE
{

   class class_derived: public class_base

   {

    public:

    class_derived(); 
    class_derived(const NAMESPACE::S_UINT32 classderivedId);
    virtual void method1();
    ...
  };
}

Pyclass_derived是我实现的一个类,用于考虑虚拟方法。

 class Pyclass_derived: public NAMESPACE::class_derived{
    public:
      using NAMESPACE::class_derived::class_derived;
      void method1() override { PYBIND11_OVERRIDE(void,  
            NAMESPACE::class_derived, method1); }
     };
 }
python c++ 绑定 importerror pybind11

评论

0赞 wohlstad 11/8/2023
这回答了你的问题吗?用 pybind11 包装 C++ 抽象类时出错
0赞 AAUDI 11/8/2023
嗨,@wohlstad,不,情况不完全相同。我以这种方式绑定我的类: py::class_<PyClassdervied, NAMESPACE::class_derived, NAMESPACE::class_base>(m, “class_derived”) .def(py::init<>()) .def(py::init<const NAMESPACE::S_UINT32>(), py::arg(“classnameId”)) ..... ;我的类.cpp是: namespace NAMESPACE { class class_derived: public class_base { public: class_derived(); class_derived(const NAMESPACE::S_UINT32 classderivedId);
0赞 wohlstad 11/8/2023
我不是这方面的专家,但那篇帖子中的答案提到您还必须“包装”基类(除了派生的基类)。你试过了吗?
0赞 AAUDI 11/8/2023
我试过了,但我仍然有同样的问题。事实上,在我的情况下,未知基类型介于类(派生类)和 NAMESPACE::d erived_class ImportError: generic_type: type “class” 引用了未知基类型“NAMESPACE::class”
0赞 wohlstad 11/8/2023
我删除了我的“重复”投票。对不起,我帮不上忙。

答: 暂无答案