2012-08-14 18 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