2016-01-14 1 views
1

Я заинтересован в использовании Boost.Python для вызова функций C++ из сценариев Python .Вызов C++ из python с использованием boost python: вводный пример не работает

Этот пример here является вводным примером на домашней странице Boost python, которой я не могу работать. Может ли кто-нибудь помочь мне с этим?

Это то, что я пытался

Я создал файл с именем hello_ext.cpp следующим

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


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

Затем я скомпилировал его в общую библиотеку следующим

Наконец розжига интерпретатор ipython Я попытался установить import hello_ext , но получил следующее сообщение об ошибке. Где я неправ?

In [1]: import hello_ext 
--------------------------------------------------------------------------- 
ImportError        Traceback (most recent call last) 
<ipython-input-1-18c4d6548768> in <module>() 
----> 1 import hello_ext 

ImportError: ./hello_ext.so: undefined symbol: _ZNK5boost6python7objects21py_function_impl_base9max_arityEv 
+0

Вам нужно связать 'libhello_ext.so' с' libboost_python'. –

+0

@ н.м. Спасибо! Можете ли вы рассказать мне, как я должен это делать? Мне нужно изменить первую или вторую строку? – smilingbuddha

ответ

3

Вы должны включить некоторые библиотеки в вашей команде ссылку,

g++ -shared -Wl,--no-undefined hello_ext.o -lboost_python -lpython2.7 -o hello_ext.so 

С -Wl,--no-undefined опцией линкера будет ошибкой, если некоторые символы отсутствуют.

+0

Спасибо! Похоже, что он не может найти библиотеку libboost_python. Кажется, он не установлен. В любом случае, я приму этот ответ! Благодарю. – smilingbuddha

+2

Объектный файл и библиотеки Afaik должны быть указаны в правильном порядке в вызове компоновщика, сначала с зависимым модулем: 'g ++ -shared -Wl, - no-undefined -o hello_ext.so hello_ext.o -lboost_python -lpython2. – jomuel

+0

@jomuel Огромное спасибо! Код все еще не компилировался. Теперь он отлично работает! – smilingbuddha

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