2011-12-03 3 views
4

私は現在、Pythonを埋め込んだC++からコンパイルされた実行可能ファイルを持っています。埋め込み実行ファイルは、いくつかのCythonモジュールを読み込むPythonスクリプトを実行します。 Cythonモジュールと実行可能ファイルは共に共有ライブラリにリンクされています。CythonモジュールをPythonを埋め込んだ実行ファイルに静的にリンクできますか?

共有ライブラリを実行可能ファイルに静的にリンクすることで、共有ライブラリを実行可能ファイルに移動したいと考えています。

CythonモジュールをPythonを埋め込んだ実行ファイルに静的にリンクできますか?この状況を処理する最善の方法は何ですか?

答えて

7

はい、可能ですが、Pythonインタプリタを手にしている場合は可能です。私が記述しようとしていることは、IOSプラットフォーム上のPythonで行われています。元のpythonインタプリタを触れたくない場合、あなたのモジュールについてPythonに知らせる方法をもっと調べる必要があります。

可能な方法の1つは

です
  • はあなたのモジュール)(dlopenのないことを好むあなた自身python with a dynload patchをコンパイルしますが、モジュールがメモリ内にすでにあるかどうかを確認するために()を直接dlsymを使用します。

  • ビルドプロセス中に生成されたすべての.o(.soではなく)を含むlibTEST.aを作成します。あなたはbuild/temp.*で通常それを見つけて、このような何かを行うことができます。

    ar rc libTEST.a build/temp.*/*.o 
    ranlib libTEST.a 
    
  • メインの実行ファイルをコンパイルする場合、コンパイルコマンドラインに追加することによって、その新しいlibTEST.aに依存関係を追加する必要があります。

    -lTEST -L。

この結果は、あなたのcythonモジュールのすべてのシンボルを含む実行可能ファイルを与え、pythonはそれらをメモリ内で検索することができます。

(例として、私は.soの生産ではないためにコンパイル時にLDをリダイレクト強化されたラッパーを使用していて、末尾に.Aを作成します。kivy-iosプロジェクトでは、あなたが生成するために使用されliblinkをつかむことができます.oとbiglinkは、すべての.oディレクトリを取得し、.aを生成するために使用されます。build_kivy.shでの使用方法を見ることができます

+1

リンクが壊れているようです... – Bach

関連する問題