我有一个具有以下结构的示例。
├── CMakeLists.txt
├── ext
│ └── pybind11
└── main.cpp
cmakelists.txt
cmake_minimum_required(VERSION 3.5)
project(notworking)
add_subdirectory(ext/pybind11)
add_executable(notworking
main.cpp)
target_link_libraries(notworking PRIVATE python3.6m)
target_link_libraries(notworking PRIVATE pybind11)
main.cpp
#include <pybind11/pybind11.h>
namespace py = pybind11;
int main() { py::object decimal = py::module::import("decimal"); }
现在运行
╰─ ./notworking
[1] 14879 segmentation fault (core dumped) ./notworking
我错过了什么可以在这里正确加载此模块?我已经搜查了文档,特别是"构建系统"部分,但已经空了。
在C 中使用PYBIND11中的其他包装器时,这似乎也是如此。
我已经有一个修改了您的示例版本,可以同时使用本地和本机模块运行。基本过程如下:
安装Python3.6,Python3.6-DEV和CMAKE(最新3.10)。我只安装了Python3.6(版本3.6.3)
从Github和Unzip下载Pybind11-Master。在未拉链的文件夹中:
mkdir build
cd build
cmake ..
make check -j 4
sudo make install
用简单的main.cpp和calc.py来源创建"不工作"项目:
main.cpp:
#include <pybind11/embed.h>
namespace py = pybind11;
int main() {
py::scoped_interpreter guard{};
py::print("Hello, World!");
py::module decimal = py::module::import("decimal");
py::module calc = py::module::import("calc");
py::object result = calc.attr("add")(1, 2);
int n = result.cast<int>();
assert(n == 3);
py::print(n);
}
calc.py(必须存在于同一文件夹中:)
def add(i, j):
return i + j
我的简单cmakelists.txt文件:
cmake_minimum_required(VERSION 3.5)
project(notworking)
find_package(pybind11 REQUIRED)
add_executable(notworking main.cpp)
target_link_libraries(notworking PRIVATE pybind11::embed)
构建和运行提供输出:
Hello, World!
3
希望这有帮助。