gpt4 book ai didi

python - 如何使用嵌入式 python 解释器构建和执行 cpp 文件(pybind11)

转载 作者:行者123 更新时间:2023-12-02 09:45:54 24 4
gpt4 key购买 nike

我正在尝试找到一种使用 pybind11 构建和运行带有嵌入式 python 解释器的 cpp 文件的方法。

来自this tutorial ,它使用 CMake,但我正在寻找一种无需 CMake 即可完成此操作的方法。

这是我尝试过的。

example.cpp中:

#include <pybind11/embed.h> // everything needed for embedding
namespace py = pybind11;

int main() {
py::scoped_interpreter guard{}; // start the interpreter and keep it alive

py::print("Hello, World!"); // use the Python API
}

当我运行以下命令时,在终端中:(构建良好)

c++ -O3 -Wall -std=c++11 -undefined dynamic_lookup `python3 -m pybind11 --includes` example.cpp -o example

然后运行二进制文件

./example

我收到以下错误:

dyld: Symbol not found: _PyBaseObject_Type Referenced from: /Users/cuinjune/Desktop/pybindtest/./example Expected in: flat namespace in /Users/cuinjune/Desktop/pybindtest/./example zsh: abort ./example

是否有任何可能的方法可以使用 pybind11 正确构建和执行带有嵌入式 python 解释器的 cpp 文件? (不使用 CMake)

最佳答案

与 python 库的链接,该库定义了该符号(以及您需要的更多符号)。

假设是标准安装,那只不过是添加:

`-lpython`

到 CLI(或 -lpython3 等,如果您的系统上存在多个 python 库)。您也可以添加:

`python3-config --libs`

如果您的 python3 安装了 python3-config

编辑:根据注释,相关库目录不可用于您设置中的链接器。一种选择是使用全套标志:

`python3-config --ldflags`

我仍然假设 python3-config 与您的 python3 匹配。如果没有,则另一种方法是获取目录 distutils。在前面添加 -L 并根据您的安装添加 -lpython-lpython3:

-L`python3 -c 'import distutils.sysconfig as ds; print(ds.get_config_var("LIBDIR"))'` -lpython

(是的,还有一个“LDFLAGS”config_var,但这些是构建 python 的标志,不太可能是您想要的。)

关于python - 如何使用嵌入式 python 解释器构建和执行 cpp 文件(pybind11),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59588365/

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