0

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.soPython エントリ ポイントが含まれていますが、共有ライブラリとしてロードしても、Python 3 拡張機能としてロードすると機能しないようです。

編集:

Python は Linux の規則を尊重しません。したがって、lib の場合は名前を付けませんlibmylib.soが、mylib.so.

my_mainさらに悪いことに、 so が という名前の場合にのみロードされmy_main.soます。とても迷惑。

4

1 に答える 1