2012-08-14 3 views
1

Мне нужно создать оболочку python для большой библиотеки C. Я пытаюсь использовать модуль ctypes для этого, но я получаю сообщение об ошибке при попытке загрузить общую библиотеку. Вот код python, который я запускаю в данный момент.Нужна помощь при загрузке разделяемой библиотеки с использованием Ctypes

import ctypes 

praatlib_path = '/n/banquet/da/martega/Programming/libs/libpraat.so' 
praatlib = ctypes.CDLL(praatlib_path) 

print 'Hello, World!' 

К сожалению, я получаю следующее сообщение об ошибке, которую я не знаю, достаточно для отладки:

Traceback (most recent call last): 
    File "./praatlib.py", line 9, in <module> 
    praatlib = ctypes.CDLL(praatlib_path) 
    File "/usr/local/lang/python-2.7.3/lib/python2.7/ctypes/__init__.py", line 365, in __init__ 
    self._handle = _dlopen(self._name, mode) 
OSError: /n/banquet/da/martega/Programming/libs/libpraat.so: undefined symbol: _Znaj 

Может кто-нибудь объяснить, что это значит и как я могу идти о фиксации его?

В случае, если это полезно, вот команда в Makefile, которая создает общую библиотеку.

gcc -shared -Wl,-soname,libpraat.so -o libpraat.so `find num glpk audio stat LPC FFNet dwtools artsynth fon dwsys GSL kar FLAC mp3 library -name "*.o"` 

Edit: я перекомпилировать его с г ++ вместо C++. Это фиксированное исходное сообщение об ошибке, но теперь я получаю следующее сообщение об ошибке, которое что-то я, вероятно, придется исправить сам по себе:

Traceback (most recent call last): 
    File "./praatlib.py", line 9, in <module> 
    praatlib = ctypes.CDLL(praatlib_path) 
    File "/usr/local/lang/python-2.7.3/lib/python2.7/ctypes/__init__.py", line 365, in __init__ 
    self._handle = _dlopen(self._name, mode) 
OSError: /n/banquet/da/martega/Programming/libs/libpraat.so: undefined symbol: Melder_hasError 

ответ

2

Недостающая символу _Znaj demanges к operator new[](unsigned int):

$ c++filt _Znaj 
operator new[](unsigned int) 

Попробуйте скомпилировать вашу библиотеку, используя g ++ вместо gcc

+0

Спасибо! Я буду перекомпилировать библиотеку и отчет с моими результатами. – martega

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