我正在尝试编译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);
}
注意:
还有:如果我正确理解以下情况:当我将构建与lboost_python链接时,它使用了一些函数PyInt_Type
,PyString_FromString
。它有关于它们的返回类型和输入参数的信息,但没有它们的真正定义,即函数体,这是在其他库中定义的(在我的例子中是python库),我必须告诉linker这个库要包含在构建中。我的理解正确吗?如果是,那么为什么针对python3.6m
的链接没有帮助?在
你链接库的顺序不对。}必须在它之后,因为{}依赖于{}。在
boost_python
必须在前面,而{注意:这是错误的:
-L/usr/include
:-L
告诉链接器在哪里找到库,但是/usr/include
包含头,而不是库。您应该根本不需要它,但是如果您需要,它是-L/usr/lib
或类似的。在boost_python
可能指向Python2.7版本,例如在debian stretch中(它应该具有与Ubuntu16.04中类似的包)。在我想该库的python3.6版本可能还不易获得。如果
^{pr2}$libboost_python-py35
与python3.6不兼容,那么最简单的选择可能是使用python3.5,即用于动态链接。在
相关问题 更多 >
编程相关推荐