问题链接Boost.pythonexamp公司

2024-10-04 13:15:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编译this示例,但是得到了有关undefined reference to PyInt_Type/PyString_FromString/PyNumber_Divide等的错误。我已经将我的构建链接到boost_python和{}。在

我正在用 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. 我能够使用相同的构建参数和include指令运行this
  3. 完整的list错误
  4. 我用的是Ubuntu 16.04

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


Tags: helloobjectinclude链接maintype错误this
2条回答

你链接库的顺序不对。boost_python必须在前面,而{}必须在它之后,因为{}依赖于{}。在

注意:这是错误的:-L/usr/include-L告诉链接器在哪里找到库,但是/usr/include包含头,而不是库。您应该根本不需要它,但是如果您需要,它是-L/usr/lib或类似的。在

boost_python可能指向Python2.7版本,例如在debian stretch中(它应该具有与Ubuntu16.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

我想该库的python3.6版本可能还不易获得。如果libboost_python-py35与python3.6不兼容,那么最简单的选择可能是使用python3.5,即

^{pr2}$

用于动态链接。在

相关问题 更多 >