共有ライブラリインタフェースのレビュー

共有ライブラリインタフェースのレビュー

最初に使用するライブラリに問題があります(Boost.Pythonですが、私の問題はこの場合よりも一般的です)。

したがって、私が構築したライブラリのインターフェイスが何であるかを確認する必要があります。少なくともすべてを正しく構築したことを確認するためです。

(Pythonは、名前が変更された.soを.pydのPYTHONPATHに入れたにもかかわらず、私のモジュールを見ることができないと文句を言いました。私のライブラリに問題がありました)

.soライブラリのすべての公開関数名と可能であれば、そのプロトタイプの名前を知る必要があります。

同様の結果を得るためにインストールできるコマンドやパッケージはありますか?

答え1

ELFファイル(実行ファイルまたはライブラリ)から情​​報を取得できますreadelf

エクスポートしたシンボルを探しているようです。

$ readelf --dyn-syms libyourthing.so

C型関数の場合、パラメータ型または戻り値ではなく関数名のみを取得できます。 C++ 関数の場合、無効な名前を取得します。コマンドの出力をパイプしてc++filt関数名と引数の型を取得します(ただし、まだ戻り値はありません)。
(グローバル変数も名前とサイズを含む出力に表示されますが、型は表示されません。)

他の有用なツールは、同様の情報を提供することnmです。objdump

しかし、それがあなたに役立つかどうかはわかりません。また、stracePythonがあなたが思う場所を探していることを確認する必要があります。それは次のとおりです。

$ strace -e trace=open python your_code_that_loads_your_lib.py

Pythonが実行したすべての呼び出しが表示されますopen。そこからライブラリ名を探します。たくさん上で録音してフィルタリングします)。通貨ごとに戻りコードも表示されるので、何が起こっているのかをよりよく知ることができます。

ああ、そして32ビットライブラリを64ビットPythonランタイムでロードしようとしているか、その逆にロードしようとしていないことを確認してください。

関連情報