support dynamic library.

This commit is contained in:
ykiko 2024-09-22 19:56:41 +08:00
parent 1127d59b47
commit dc546f5699
2 changed files with 36 additions and 0 deletions

View File

@ -50,4 +50,13 @@ using module_ = module;
} \
static void _pkbind_register_##name(::pkbind::module& variable)
#define PYBIND11_MODULE(name, variable) \
static void _pkbind_register_##name(::pkbind::module& variable); \
extern "C" bool pybind_module_initialize() { \
auto m = ::pkbind::module::create(#name); \
_pkbind_register_##name(m); \
return true; \
} \
static void _pkbind_register_##name(::pkbind::module& variable)
} // namespace pkbind

View File

@ -12,6 +12,17 @@ PYBIND11_EMBEDDED_MODULE(example, m) {
});
}
PYBIND11_MODULE(example3, m) {
m.def("add", [](int a, int b) {
return a + b;
});
auto math = m.def_submodule("math");
math.def("sub", [](int a, int b) {
return a - b;
});
}
namespace {
TEST_F(PYBIND11_TEST, module) {
@ -52,4 +63,20 @@ TEST_F(PYBIND11_TEST, raw_module) {
EXPECT_EQ(math2.attr("sub")(4, 3).cast<int>(), 1);
}
TEST_F(PYBIND11_TEST, module3) {
pybind_module_initialize();
py::exec("import example3");
EXPECT_EVAL_EQ("example3.add(1, 2)", 3);
py::exec("from example3 import math");
EXPECT_EVAL_EQ("math.sub(1, 2)", -1);
py::exec("from example3.math import sub");
EXPECT_EVAL_EQ("sub(1, 2)", -1);
auto math = py::module::import("example3.math");
EXPECT_EQ(math.attr("sub")(4, 3).cast<int>(), 1);
}
} // namespace