我刚刚发现了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.
答案 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:感谢宝贵的提示。