需要帮助使用Ctypes加载共享库

时间:2012-08-14 12:02:11

标签: python shared-libraries ctypes

我必须为大型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

1 个答案:

答案 0 :(得分:2)

缺失的符号_Znaj将导致operator new[](unsigned int)

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

尝试使用g ++而不是gcc

编译库