Я пытаюсь передать класс между двумя модулями, скомпилированными с разными версиями pybind11.
Например, возьмите liba, скомпилированную с pybind11 версии 2.3.0:
#include <pybind11/pybind11.h>
#include "foo.h"
namespace py = pybind11;
PYBIND11_MODULE(liba, m) {
py::class_<Foo>(m, "Foo");
m.def("new_foo", []() { return new Foo(); });
}
и libb, скомпилированный с pybind11 версии 2.4.3:
#include <pybind11/pybind11.h>
#include <liba/foo.h>
namespace py = pybind11;
PYBIND11_MODULE(libb, m) {
m.def("use_foo", [](Foo *foo) {});
}
Затем попытка сделать следующее:
import liba
import libb
x = liba.new_foo()
libb.use_foo(x)
приводит к ошибке TypeError: use_foo(): incompatible function arguments. The following arguments types are supported: 1. (arg0: Foo) -> None
.
Я не Я не могу контролировать версию pybind11, которую использует liba. Можно ли как-нибудь компилировать libb, используя более позднюю версию pybind11?