6

他の C/c++ プログラムとリンクできる C インターフェイスを備えた共有ライブラリに「コンパイル」して、他の多くのライブラリ (おそらく python や他の dll など) に依存せずに動作するようにしたい Python コードがたくさんありますが、それらはすべて、最終的な lib を含むディレクトリに含める必要があります)。

このためにPythonコードをC++に書き直したくありません。もちろんできますが、dll/so lib のように使用できるスタンドアロンの lib を用意するのが最善です。

私は cython を試してみましたが、python を C にコンパイルしてから C コードを dll にコンパイルしたかったのですが、まだうまく動作していないようです (まだ完璧に動作させることはできていません)。そして、bbfreeze も試してみましたが、bbfreeze は .so ファイルの作成をサポートしていますか? それを行う方法を見つけることができませんでした。誰か知っていますか?

もっと簡単な他のオプションを知っていますか? Python コードは一度だけコンパイルする必要があります。そして何よりも、単一の .so ファイルを作成する場合は、それがどれほど大きくても、あまり多くの依存関係がなくても機能します。

4

1 に答える 1

5

C++ アプリケーション内から Python をライブラリとして使用できます。これはPython/C APIと呼ばれます。

アイデアは、独自のインタープリターを初期化してから、それにスクリプトをロードするというものです。Python インタープリター内のグローバル変数またはモジュールを介して C++ オブジェクトを公開し、コードと対話することができます。C++ コードから直接 Python 関数を実行するだけです。

Python スクリプトを共有ライブラリに組み込みたいと思われる方もいると思いますが、これは従来の GNU ツールチェーンでは必ずしも簡単な作業ではありません。これを実現するための手法は複数ありますが、どれも正式なものではなく、スクリプトを外部ファイルに格納するのとは対照的に、すべてが複雑すぎるようです。

スクリプトをエンド ユーザーから隠すことが目的の場合は、スクリプトに署名するか秘密鍵で暗号化し、ライブラリ内に公開鍵を埋め込むことができますが、十分な動機があれば誰でも簡単に鍵を取得できることに注意してください。 .

于 2015-10-25T21:03:51.327 に答える