gpt4 book ai didi

c++ - boost_python with python 3.5 from anaconda - (few) undefined references

转载 作者:行者123 更新时间:2023-11-28 00:01:22 24 4
gpt4 key购买 nike

boost :1.60.0 python :3.5.0.1(来自 python )

示例代码:

#include <iostream>
#include <boost/python.hpp>
#include <Python.h>

namespace py = boost::python;

int main()
{
// Must be called before any boost::python functions
Py_Initialize();
// import the main module
py::object main_module = py::import("__main__");
// load the dictionary object out of the main module
py::object main_namespace = main_module.attr("__dict__");
// run simple code within the main namespace using the boost::python::exec
// function
py::exec("print ('Hello, world')", main_namespace);
// any valid Python will execute
py::exec("print ('Hello, world')[3:5]", main_namespace);
}

编译为:g++ -std=c++11 test.cpp -o test.o -I/home/user/anaconda3/pkgs/python-3.5.1-0/include/python3.5m/-L/home/user/anaconda3/pkgs/python-3.5.1-0/lib/python3.5/config-3.5m -lpython3.5m -pthread -lutil -ldl -lboost_python3

输出:

//usr/local/lib/libboost_python3.so: undefined reference to `PyString_AsString'
//usr/local/lib/libboost_python3.so: undefined reference to `PyInt_Type'
//usr/local/lib/libboost_python3.so: undefined reference to `PyString_FromStringAndSize'
//usr/local/lib/libboost_python3.so: undefined reference to `PyString_FromString'
//usr/local/lib/libboost_python3.so: undefined reference to `PyString_FromFormat'
//usr/local/lib/libboost_python3.so: undefined reference to `PyInt_FromLong'
//usr/local/lib/libboost_python3.so: undefined reference to `PyInt_AsLong'
//usr/local/lib/libboost_python3.so: undefined reference to `PyString_Type'

在此之前,我还遇到了其他链接器错误,我正在链接 2.7 版的 python。我用 3.5 版本构建了 boost_python

我知道3.5确实没有这些功能;不知道它们在哪里使用。

相反,请在下面找到:

:~/$ nm /usr/local/lib/libboost_python3.so |grep "PyString"
U PyString_AsString
U PyString_FromFormat
U PyString_FromString
U PyString_FromStringAndSize
U PyString_Type
:~/$ nm /usr/local/lib/libboost_python3.so |grep "PyInt"
U PyInt_AsLong
U PyInt_FromLong
U PyInt_Type

我怎样才能简单地“继续”?

我实际上尝试在 C++ 文件中定义这些函数,因为我完全知道我不会调用这些函数,但它不起作用。我知道这是一种搞笑的方式...,但为了给您一个想法,我想“继续”,我提到了它。

最佳答案

我认为您的 libboost_python3.so 适用于 python 2.7 或 3.1 之前的 python 版本,因为它指的是例如 PyString_AsString 在 python 3.1、3.2、3.3、3.4 或 3.5 中不可用(基于在 debian 软件包的库中找到的符号)。

nm -D /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0|grep PyString_AsString
0000000000112120 T PyString_AsString
0000000000111fd0 T PyString_AsStringAndSize

和 python 3.4(3.5 相同)

nm -D /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0 |grep AsString
000000000017ea10 T PyByteArray_AsString
000000000017f680 T PyBytes_AsString
0000000000180cf0 T PyBytes_AsStringAndSize

关于c++ - boost_python with python 3.5 from anaconda - (few) undefined references,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38772627/

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