C で Python 3 拡張モジュールを作成しましたが、Python でそれをインポートできないようです。
Python がどの共有ライブラリ (Linux では .so) を読み込もうとしているか、またなぜ失敗したのかを Python に出力させる方法はありますか?
悲しいことに、私が読んだすべてのドキュメントは、ネイティブのインポート手順を簡潔に説明していないため、実際には役に立ちません。
私が試したのは:
ctypes.CDLL("libmydep1.so")
ctypes.CDLL("libmydep2.so")
try:
import my_main
print("Load python")
except:
ctypes.CDLL("libmylib.so")
print("Load shared object")
常に印刷されLoad shared object
ます。
libmylib.so
Python エントリ ポイントが含まれていますが、共有ライブラリとしてロードしても、Python 3 拡張機能としてロードすると機能しないようです。
編集:
Python は Linux の規則を尊重しません。したがって、lib の場合は名前を付けませんlibmylib.so
が、mylib.so
.
my_main
さらに悪いことに、 so が という名前の場合にのみロードされmy_main.so
ます。とても迷惑。