如何使用Boost.Python

时间:2016-03-04 12:14:25

标签: python c++ boost

我刚刚发现了Boost.Python,我正在试图弄清楚它是如何工作的。我试图通过the tutorial on the official website。但是,我得到了

link.jam: No such file or directory

在运行示例中的bjam时(看起来只是一个警告), 和

Traceback (most recent call last):
File "hello.py", line 7, in <module>
import hello_ext
ImportError: libboost_python.so.1.55.0: cannot open shared object file: No such file or directory

运行python hello.py时。

我还尝试按照another tutorial中的描述编译模块,但结果相似。我用自己编译的boost1.55运行Ubuntu14.04。

我尝试编译以下内容:

#include <boost/python.hpp>
char const* greet()
{
    return "hello, world";
}

BOOST_PYTHON_MODULE(hello_ext)
{
    using namespace boost::python;
    def("greet", greet);
}

使用命令行中的以下命令:

g++ -o hello_ext.so hello.cpp -I /usr/include/python2.7/ -I /home/berardo/boost_1_55_0/ -L /usr/lib/python2.7/ -L /home/berardo/boost/lib/ -lboost_python -lpython2.7 -Wl, -fPIC -expose-dynamic 

仍然给了我一个:

/usr/bin/ld: impossibile trovare : File o directory non esistente
collect2: error: ld returned 1 exit status.

1 个答案:

答案 0 :(得分:-1)

最后,我能够让它发挥作用。首先,我按照Dan的建议修复了链接器问题。它最终编译但我仍然得到:

ImportError: libboost_python.so.1.55.0: cannot open shared object file: No such file or directory

问题是python模块无法正确加载所以我需要添加另一个链接器选项。在这里,我报告最终的Makefile:

# location of the Python header file
PYTHON_VERSION = 2.7
PYTHON_INCLUDE = /usr/include/python$(PYTHON_VERSION)

# location of the Boost Python include files and library

BOOST_INC = ${HOME}/boost/include
BOOST_LIB = ${HOME}/boost/lib

# compile mesh classes
TARGET = hello_ext

$(TARGET).so: $(TARGET).o
    g++ -shared -Wl,-rpath,$(BOOST_LIB) -Wl,--export-dynamic $(TARGET).o -L$(BOOST_LIB) -lboost_python -L/usr/lib/python$(PYTHON_VERSION)/config -lpython$(PYTHON_VERSION) -o $(TARGET).so

$(TARGET).o: $(TARGET).C
    g++ -I$(PYTHON_INCLUDE) -I$(BOOST_INC) -fPIC -c $(TARGET).C

注意 -Wl,-rpath,选项,它显然使新创建的共享库可用于python脚本。
@Dan:感谢宝贵的提示。