Версии микширования Pybind11 - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь передать класс между двумя модулями, скомпилированными с разными версиями 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?

...