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

标签 python c++ boost

我正在尝试编译 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/

相关文章:

c++ - 尝试使用 makefile 编译 C++ 程序时出现 "fatal error: boost/regex.hpp: No such file or directory"

c++ - 当没有更多引用时如何从缓存中删除智能指针?

python - 递归函数中数据库连接的最佳实践?

python - 在 Pandas 数据框中模糊匹配两个字符串的最快方法

c++ - C++中的快速多线程随机序列

c++ - boost::asio 与 boost::unique_future

c++ - 使用 Boost 避免用户在 C++ 项目中访问文本资源

python - 使用 pandas series.sample() 返回索引?

python - numpy.swapaxes 的行为

C++ 调试 Penumbra 游戏,tidtable.c 中的错误