1

大規模な 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"`

編集: 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
4

1 に答える 1

2

欠落している記号は次の_Znajようになりoperator new[](unsigned int)ます:

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

gcc の代わりに g++ を使用してライブラリをコンパイルしてみてください

于 2012-08-14T12:17:19.770 に答える