最初に使用するライブラリに問題があります(Boost.Pythonですが、私の問題はこの場合よりも一般的です)。
したがって、私が構築したライブラリのインターフェイスが何であるかを確認する必要があります。少なくともすべてを正しく構築したことを確認するためです。
(Pythonは、名前が変更された.soを.pydのPYTHONPATHに入れたにもかかわらず、私のモジュールを見ることができないと文句を言いました。私のライブラリに問題がありました)
.soライブラリのすべての公開関数名と可能であれば、そのプロトタイプの名前を知る必要があります。
同様の結果を得るためにインストールできるコマンドやパッケージはありますか?
ベストアンサー1
ELFファイル(実行ファイルまたはライブラリ)から情報を取得できますreadelf
。
エクスポートしたシンボルを探しているようです。
$ readelf --dyn-syms libyourthing.so
C型関数の場合、パラメータ型または戻り値ではなく関数名のみを取得できます。 C++ 関数の場合、無効な名前を取得します。コマンドの出力をパイプしてc++filt
関数名と引数の型を取得します(ただし、まだ戻り値はありません)。
(グローバル変数も名前とサイズを含む出力に表示されますが、型は表示されません。)
他の有用なツールは、同様の情報を提供することnm
です。objdump
しかし、それがあなたに役立つかどうかはわかりません。また、strace
Pythonがあなたが思う場所を探していることを確認する必要があります。それは次のとおりです。
$ strace -e trace=open python your_code_that_loads_your_lib.py
Pythonが実行したすべての呼び出しが表示されますopen
。そこからライブラリ名を探します。たくさん上で録音してフィルタリングします)。通貨ごとに戻りコードも表示されるので、何が起こっているのかをよりよく知ることができます。
ああ、そして32ビットライブラリを64ビットPythonランタイムでロードしようとしているか、その逆にロードしようとしていないことを確認してください。