2

C++ で作成したパッケージがあり、既に共有ライブラリにコンパイルしています。

独自のメイン関数とリンクすると、初期化関数 initfoo を直接呼び出してパッケージを初期化でき、すべて正常に動作します。

Python に共有ライブラリをパッケージとして認識させるにはどうすればよいので、次のように入力するだけです。

import foo

通常のpythonインタープリターから実行していますか?

コンパイルは通常の cmake ビルド システムの一部である必要があるため、distutils を使用してファイルをコンパイルすることに興味はありません。共有ライブラリをロードするために必要なパッケージ ファイルを作成するだけです。

更新:私は今それが働いています。この問題は、共有ライブラリ名の lib プレフィックスをデフォルトにする cmake にありました。これを修正するには

SET_TARGET_PROPERTIES(foo PROPERTIES PREFIX "")

および Mac OS X の場合

SET_TARGET_PROPERTIES(foo PROPERTIES SUFFIX ".so")
4

1 に答える 1

2

シンボルがエクスポートされた共有ライブラリがある場合initfoo(注:質問にのタグを付けているので、シンボルであることを確認してくださいextern "C"。そうしないと、名前マングリングによってインタプリタがそれを見つけることができなくなります)、それはすでにPythonモジュールであり、ロードできます。直接、それ以上の作業はありません。他のモジュールと同じように、検索パス上にあることを確認するだけで済みます。

于 2011-06-23T16:29:36.930 に答える