gpt4 book ai didi

python - 在 C++ 中使用 pybind11 包装器时出现段错误

转载 作者:行者123 更新时间:2023-11-28 01:39:44 31 4
gpt4 key购买 nike

我有一个具有以下结构的示例。

├── 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

我错过了什么才能让这个模块在这里正确加载?我已经搜索了 documentation ,特别是构建系统部分,但已经空了。

在 C++ 的 pybind11 中使用其他包装器时,对我来说似乎也是如此。

最佳答案

我有您的示例的修改版本,可以与本地和 native 模块一起运行。基本流程如下:

安装 python3.6、python3.6-dev 和 CMake(最新 3.10)。我只安装了python3.6(版本3.6.3)

github 下载 pybind11-master并解压缩。在解压缩的文件夹中:

mkdir build
cd build
cmake ..
make check -j 4
sudo make install

使用简单的 main.cpp 和 calc.py 源创建“notworking”项目:

主要.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

希望对您有所帮助。

关于python - 在 C++ 中使用 pybind11 包装器时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47762543/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com