我必须为大型 C 库创建一个 python 包装器。我正在尝试使用 ctypes 模块来执行此操作,但是当我尝试加载共享库时出现错误。这是我目前正在运行的python代码。
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"`
编辑: 我用 g++ 而不是 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