2016-03-04 3 views
-1

Я недавно обнаружил Boost.Python, и я пытаюсь выяснить, как это работает. Я попытался пройти через the tutorial on the official website. Тем не менее, я получилКак использовать Boost.Python

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 

при запуске питона hello.py.

Я также попытался скомпилировать модуль, как описано в another tutorial с аналогичными результатами. Я запускаю Ubuntu14.04 с boost1.55, скомпилированным.


Я попытался скомпилировать следующее:

#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

Вы создали свои библиотеки ускорения с включенной библиотекой Python? Существуют ли соответствующие бинарные файлы python для повышения и находятся ли они в пути поиска библиотеки? Почему бы просто не использовать пакеты boost, которые уже существуют для Ubuntu? Глядя на базу данных пакетов, кажется, что boost 1.55 существует на Ubuntu 14.04 [link] (http://packages.ubuntu.com/trusty/libdevel/libboost1.55-all-dev). –

+0

@ Dan Я установил библиотеки boost для python2.7, так как мне нужна эта версия. Однако я не смог понять, как это сделать со стандартной базой данных Ubuntu. Просто для полноты я установил boost для использования программного обеспечения под названием hoomd, но у меня не было проблем с созданием последнего с повышением. – Rebrado

+0

Хмм, глядя на команду, которую вы использовали при попытке построить вручную, я вижу '-Wl, -fPIC -expose -динамический' в конце. Это не кажется правильным. '-fPIC' является компилятором. '-Wl, option' передает опцию компоновщику. Линкере следует передать опцию '--export-dynamic'. Между запятой и опцией не должно быть пробела. –

ответ

-1

Наконец , Я смог сделать это к. Во-первых, я исправил проблемы с компоновщиками, как предложил Дэн. Это, наконец, компилируется, но я все еще есть:

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

Проблема заключалась в том, что модуль питона не смог правильно загрузить так что мне нужно добавить еще один вариант компоновщика. Здесь я Окончатель- 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, вариант, который, по-видимому делает новую созданную совместно используемую библиотеку, доступную для сценария питона.
@ Dan: Спасибо за ценные советы.

+0

Вам не нужно '-Wl, - export-dynamic' для связывания разделяемых библиотек.Только для связывания исполняемых файлов. –

Смежные вопросы