2012-08-14 35 views
1

我必須爲大型C庫創建一個python包裝。我試圖使用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"` 

編輯:我同,而不是C++ G ++重新編譯它。該修正原來的錯誤,但現在我發現了以下錯誤這是我可能得解決我自己:

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 2012-08-14 12:32:30