4

Python モジュールをロードする Audacious Media Player 用のプラグインを作成しようとしています。Python 埋め込みコードはpython-2.6ソース (embed/Demo) からのものです。これはコマンドラインでコンパイルされ、

gcc -o demo demo.c -lpython2.6 -lm -L/usr/lib/python2.6/config

-lpython2.6 -lm -L/usr/lib/python2.6/configCC引数に追加しました。

そして、インポートpygtkgtkモジュールを実行する Python スクリプトをロードします。これは正常に機能します。

しかし、プラグイン (共有ライブラリ) をコンパイルした後、次のエラーが発生します (これはgtk、ネイティブ ライブラリを使用するすべての python モジュールで同じです)。

 Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "./xyz.py", line 7, in <module>
    import gtk
  File "/usr/lib/pymodules/python2.6/gtk-2.0/gtk/__init__.py", line 30, in <module>
    import gobject as _gobject
  File "/usr/lib/pymodules/python2.6/gtk-2.0/gobject/__init__.py", line 26, in <module>
    from glib import spawn_async, idle_add, timeout_add, timeout_add_seconds, \
  File "/usr/lib/pymodules/python2.6/gtk-2.0/glib/__init__.py", line 22, in <module>
    from glib._glib import *
ImportError: /usr/lib/libpyglib-2.0-python2.6.so.0: undefined symbol: PyExc_ImportError

Python インタープリターをセットアップするための C コードには、PySys_SetArgv呼び出しがないだけです。私はそれを偽造しようとしましたが、同じエラーが発生しました!

4

2 に答える 2

3

-Xlinker -export-dynamicLinux を使用していると仮定すると、コンパイラ行に追加する必要があります。これにより、実行可能ファイルで定義されたシンボルが拡張モジュールで使用できるようになります。

LINKFORSHARED他のプラットフォームでは、Python makefile で が設定されているかどうかを確認してから、同じフラグを使用してください。

于 2011-01-22T10:36:02.453 に答える
1

Windows で 64 ビット Python を使用していますか? 64 ビットの python26.Lib には、32 ビットの Python で使用できるいくつかのシンボルがありません。32 ビットの Python を試してみると、問題は解決するはずです。

于 2012-04-30T09:35:47.957 に答える