gpt4 book ai didi

python - 链接 Boost.python 示例的问题

转载 作者:行者123 更新时间:2023-11-28 04:48:28 30 4
gpt4 key购买 nike

我正在尝试编译 this示例,但出现有关 undefined reference to PyInt_Type/PyString_FromString/PyNumber_Divide 等的错误。我已经将我的构建链接到 boost_pythonpython3.6m

我正在构建它g++ example.cpp -L/usr/include/boost/python -lboost_python -lpython3.6m -I/usr/include/python3.6m

主要.cpp

#include <boost/python.hpp>
#include <boost/python/detail/wrap_python.hpp>
#include <boost/python/exec.hpp>
#include <boost/python.hpp>
#include <iostream>
#include <string>
#include <Python.h>

using namespace boost::python;

int main() {

Py_Initialize();
object main_module = import("__main__");
object main_namespace = main_module.attr("__dict__");

object ignored = exec("hello = file('hello.txt', 'w')\n"
"hello.write('Hello world!')\n"
"hello.close()",
main_namespace);
}

注意:

  1. 我安装了 python3.6-dev
  2. 我能够运行 this使用相同的构建参数和包含指令
  3. 已满 list错误
  4. 我正在使用 Ubuntu 16.04

另外:如果我正确理解以下发生的事情:当我将我的构建与 lboost_python 链接时,它使用一些函数 PyInt_TypePyString_FromString .它有关于它们的返回类型和输入参数的信息,但没有它们的真实定义,即函数体,它是在其他一些库中定义的(在我的例子中它是 python 库),我必须告诉链接器关于这个库的信息将它包含在 build 。我的理解正确吗?如果是,那么为什么针对 python3.6m 的链接没有帮助?

最佳答案

boost_python 可能指向 python 2.7 版本,例如在 debian stretch 中(它应该具有与 ubuntu 16.04 中类似的包)。

> cd /usr/lib/x86_64-linux-gnu
> ls -l libboost_python*.*
... libboost_python-py35.a
... libboost_python-py27.a
... libboost_python.a -> libboost_python-py27.a
... libboost_python-py27.so.1.55.0
... libboost_python-py27.so -> libboost_python-py27.so.1.62.0
... libboost_python.so -> libboost_python-py27.so
... libboost_python-py35.so.1.62.0
... libboost_python-py35.so -> libboost_python-py35.so.1.62.0

我想该库的 python 3.6 版本可能不容易获得。如果 libboost_python-py35 与 python 3.6 不兼容,即

,最简单的选择可能是使用 python 3.5
-lboost_python-py35

用于动态链接。

关于python - 链接 Boost.python 示例的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48718533/

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