Форум русскоязычного сообщества Ubuntu


Автор Тема: Python ctype не грузит библиотеку  (Прочитано 826 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kisly

  • Автор темы
  • Любитель
  • *
  • Сообщений: 82
    • Просмотр профиля
    • Записки
Python ctype не грузит библиотеку
« : 24 Август 2014, 02:35:35 »
В общем есть сторонняя shared lib (so). хотел подключить ее к своему python скрипту с помощью ctypes. А тут раз и шиш  :-[

Код: Text
  1. >>> from ctypes import cdll
  2. >>> stdcpp=cdll.LoadLibrary('/home/me/workspace/libLName_d.so.1.0.1')
Цитировать
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    stdcpp=cdll.LoadLibrary('/home/me/workspace/libName_d.so.1.0.1')
  File "/usr/lib/python2.7/ctypes/__init__.py", line 443, in LoadLibrary
    return self._dlltype(name)
  File "/usr/lib/python2.7/ctypes/__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: /home/me/workspace/libName_d.so.1.0.1: undefined symbol: _ZTVN10__cxxabiv120__si_class_type_infoE

В общем ахтунг ! Питониш партизаниш!!  ;D

Исходники либы есть, написана на c++. По умолчанию автоский Makefile собирает ее как статическую (ar -> .a), править его не стал. Просто в папке с собранными ".o" собрал их в .so.  Как я понимаю ctypes не работает с c++ ( или работает ? ). А переписывать ее - ололо, как долго.. тем более, что квалификация моя явно проигрывает автору. Какие есть наименее болезненные методы подтянуть нужную библиотеку в python коде ? Или я криво собрал .so (
Заранее спасибо.
« Последнее редактирование: 24 Август 2014, 02:38:21 от kisly »

Оффлайн Jack Sparrow

  • Активист
  • *
  • Сообщений: 614
    • Просмотр профиля
Re: Python ctype не грузит библиотеку
« Ответ #1 : 24 Август 2014, 11:18:18 »
Вот здесь что-то подобное описывают.
Why join the navy if you can be a pirate? (c) Steve Jobs

Оффлайн kisly

  • Автор темы
  • Любитель
  • *
  • Сообщений: 82
    • Просмотр профиля
    • Записки
Re: Python ctype не грузит библиотеку
« Ответ #2 : 26 Август 2014, 01:53:25 »
хмм.. смотрю пример, и не догоняю  :(

допустим у меня есть декларация (кусок). Я не понимаю, как задекларировать в extern "C" и вызвать потом в python? Сможете привести листинг ?

class My_Init: public MyPacket
{
public:

My_Init();
My_Init( const unsigned char *bytes, unsigned int length );

protected:
void _initMembers();

public:
virtual bool         decodeXOR();
static bool          MyMod( unsigned char *data );
unsigned int  Version[4];
}


Оффлайн Jack Sparrow

  • Активист
  • *
  • Сообщений: 614
    • Просмотр профиля
Re: Python ctype не грузит библиотеку
« Ответ #3 : 27 Август 2014, 10:32:27 »
Не, сам никогда не делал, но самому интересно. Вот тут, например, хорошо и по-русски описываются способы взаимодействия Python с C и другими программами.
Why join the navy if you can be a pirate? (c) Steve Jobs

 

Страница сгенерирована за 0.055 секунд. Запросов: 24.