繁体   English   中英

链接Boost.python示例的问题

[英]Issues linking Boost.python example

我正在尝试编译示例,但收到有关undefined reference to PyInt_Type/PyString_FromString/PyNumber_Divide等的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

main.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. 我能够使用相同的构建参数并包含指令来运行
  3. 完整的错误清单
  4. 我正在使用Ubuntu 16.04

另外 :如果我理解正确的话以后的事发生了:当我和lboost_python它使用了一些功能链接我的生成PyInt_TypePyString_FromString 它具有关于它们的返回类型和输入参数的信息,但是没有关于它们的实际定义(即函数体)的信息,这些信息是在其他库中定义的(在我的情况下是python库),我必须告诉链接程序有关此库的信息,以将其包含在其中建立。 我的理解正确吗? 如果是,那为什么对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

用于动态链接。

您以错误的顺序链接库。 因为boost_python依赖于python3.6m ,所以boost_python必须排在最前面,而python3.6m必须boost_python python3.6m

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM