Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 15, 2009 15:25:34

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Boost,ImportError: dynamic module does not define init function (initN

Да уж, я действительно в С++ не силен, хотя целую книжку Страуструпа осилил, но всю жизнь думал, что .h и .cpp - это всего лишь формальность.
Кажется, эта проблема меня миновала. Но теперь новая вылезла, хоть я все упростил до безобразия.
Npc.h:

class Npc{
public:
int hello(){ return 42; }
};
generate_code.py:
from pyplusplus import module_builder

mb = module_builder.module_builder_t(["Npc.h"], gccxml_path="/usr/bin/gccxml")
mb.build_code_creator( module_name='Wrap' )
mb.write_module( './Wrap.cpp' )
Wrap.cpp:
// This file has been generated by Py++.

#include "boost/python.hpp"

#include "Npc.h"

namespace bp = boost::python;

BOOST_PYTHON_MODULE(Wrap){
bp::class_< Npc >( "Npc" )
.def(
"hello"
, (int ( ::Npc::* )( ) )( &::Npc::hello ) );
}
jamroot:
using gcc ;
using python ;
python-extension Wrap :
Npc.h
Wrap.cpp
;
потом делаю `import Wrap` и получаю: ImportError: ./Wrap.so: undefined symbol: _ZTIN5boost6python15instance_holderE
и еще модуль собирается в директории debug и весит иногда под мегабайт, это так и должно быть или можно его собрать без дебагинговой информации?



Офлайн

#2 Ноя. 15, 2009 18:41:54

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Boost,ImportError: dynamic module does not define init function (initN

а вы boost собирали? Должен быть установлен в системе или через bjam install или через package manager. Не находит именно имя из boost_python_<version>.so Или не видит этот файл, или его просто нет. Или он собран с несовместимыми настройками.



Офлайн

#3 Ноя. 15, 2009 20:03:59

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Boost,ImportError: dynamic module does not define init function (initN

У меня дистрибутив Gentoo, версии boost 1.35 и 1.39, /usr/lib/boost-1_35(39)/libboost_python.so имеется, собран вот с такими флагами. Bjam тоже соответствующих версий с флагом python.
Меня смущает, что модуль собирается в режиме debug (и я не знаю как это поменять), а то вот тут прочитал, что должно быть соответствие. Может в этом проблема?
Извиняюсь, если замучил вопросами, просто мне очень нужно научиться, но я не знаю в какую сторону двигаться



Офлайн

#4 Ноя. 15, 2009 22:41:33

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Boost,ImportError: dynamic module does not define init function (initN

Во первых, в libs/python/example/tutorial - примитивный пример. Попробуйте его.
Во вторых, bjam использовать не обязательно - это всего лишь “еще один make”. Можете собирать чем вам удобно.
Еще стоит запустить bjam –help, если хотите таки с bjam.

Properties:

toolset=toolset Indicates the toolset to build with.

variant=debug|release Select the build variant

link=static|shared Whether to build static or shared libraries

threading=single|multi Whether to build single or multithreaded binaries

runtime-link=static|shared
Whether to link to static or shared C and C++ runtime.



Офлайн

#5 Ноя. 15, 2009 23:32:59

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Boost,ImportError: dynamic module does not define init function (initN

Преогромнейшее спасибо, Андрей! Действительно имена не находились потому что надо было указать путь к библиотеке в jam файле, вроде того:

project : requirements <library>/usr/lib/boost-1_35/libboost_python.so ;
И спасибо за остальной ликбез, оно не пройдет даром. В том числе на счет Propertirs, в bjam –help я такого не находил. А использовать именно bjam рекомендует документация аргументируя тем, что “большинство ошибок, что что-то не собирается происходит из-за того, что используется не bjam”.
За 5 дней мучений определенно получил левел ап.



Офлайн

#6 Ноя. 16, 2009 11:02:19

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Boost,ImportError: dynamic module does not define init function (initN

Кушайте на здоровье. Позже, наверное, наткнетесь еще на рад сложностей:
- как все правильно распихать?
- как работать с python <=> C++ conversions, что нужно и что нет? policy там всякие…



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version