Python以外のC++アプリケーション用のC++「pythonプラグイン」を作成しました。
ある時点で、.so であるこのプラグインは、python インタープリターを初期化し、python コンソールを開きます。
便宜上、「readline」モジュールがインポートされ、次のエラーが発生します。
ImportError: /usr/lib/python2.7/lib-dynload/readline.so: 未定義のシンボル: PyOS_InputHook
リンク コマンド (cmake で生成) は次のようになります。
/usr/bin/c++ -fPIC -Wall -Wextra -O3 -DNDEBUG -Xlinker -export-dynamic -Wl,-fwhole-program /usr/lib/libpython2.7.a -shared -Wl,-soname,libMyplugin.so -o libMyplugin.so [ソース] [qt ライブラリ] -lGLU -lGL -lX11 -lXext -lc -lc -lpython2.7 -Wl,-rpath,/src:/usr/local/Trolltech/Qt-4.8.4/ライブラリ:
nm libMyplugin.so
次のpython関連のシンボルを提供します:
U Py_Finalize
U Py_Initialize
00000000002114a8 B PyOS_InputHook
U PyRun_InteractiveLoopFlags
U PyRun_SimpleStringFlags
PyOS_InputHook
プラグインの BSS セクションで定義されていることがわかります。それでも、pythonreadline.so
はそれを見つけることができません。
問題は、その理由と、それを修正する方法です。