Luaの組み込みやRubyの組み込みは試してみましたので他のP言語を試してみたいと思います。
ここまで来るとADVシステムに組み込めるとかはどうでもよくなってきます。それぞれのコンパイルの手順を試してみるのが主になっています。
Pythonの組み込み
この記事を書いているときの最新のバージョンは3.3.1ですのでそれをダウンロードして作成してみます。
Pythonの場合はVisualStudioを使ってビルドが出来るようにプロジェクトが同梱されていますのでほぼ素直にビルドが出来ます。
ただ、どうもVisualStudioのバージョンによってはプロジェクトの状態が更新されていないのか、一部プロジェクトの修正が必要です。
VisualStudio2005でテストしていますので、PC/VS8.0の環境を使用しています。
ソリューション内のpythonをビルドすることで付属するDLLなども一緒に生成されます。
1. コンパイルが出来ない_subprocess.cと_time.cの参照を削除
どうもファイルが存在しないようなのでこれらの参照をpythoncoreのプロジェクトから削除します。
_subprocess.cはPCフォルダ以下、_time.c(_time.h)はModuleフォルダ以下に参照があります。
2. 不足しているファイルを追加する
不足しているのは以下のファイルなので追加します。
- Objects\namespaceobject.c
- Modules\_winapi.c
- Modules\faulthandler.c
フォルダ位置は適当でもいいですがちゃんとObjectsとModulesはプロジェクト内にありますからそれを追加します。
3. プロジェクトをビルド
ビルドに成功すればDLLとpythonの実行ファイルが生成されます。
PCのVS8.0以下に[python33.lib][python33.dll][python33.exe]が生成されます。
デバッグ版でビルドしたときは[python33_d.lib][python33_d.dll][python33_d.exe]が生成されます。
libとdllは使用するのでコピーしましょう。
4. 組み込み用のコードを作成
組み込み用のテストコードはこんな感じです。
#include "include/python.h" #ifdef _DEBUG #pragma comment(lib,"python33_d.lib") #else #pragma comment(lib,"python33.lib") #endif //_DEBUG int main(void) { Py_Initialize(); PyRun_SimpleString("print('hello python')"); Py_Finalize(); return 0; }
組み込み時にインクルードしなければならないヘッダーファイル群はすべてpythonのincludeディレクトリ内にありますのでそっくりコピーします。
説明書きにもあるようにpython.hはいろいろな定義がされるので基本的に先頭で読み込まなければならないようです。
また、このコードを実行するときは実行ファイルのパス以下(もしくはpythonを指定したパス以下)にLib以下にあるpythonのライブラリファイルがないとエラーで落ちますので注意が必要です。
実行が成功すればコマンドプロンプトに表示がされるはずです。
phpはやってみましたが・・・
どうにもうまくビルドが出来ずに・・・。
phpに付属するサブライブラリの構築やらその手の定義やらに阻まれているようです。
DLL本体はすでに作成されたバイナリが存在するのでどうにかなるのですが、それでなくても公式側ソースのプロジェクトはdswのままですし、
その他インクルードしなければならない各種ファイル群が妙な状態でVisualStudioの場合は定義の書き換えがかなり大きいと言うことも分かりました。
組み込みと言っても面倒
ライブラリがきれいに構築できないとちょっとつらいですね。
しかもライセンスの問題で自由に使用できない、と言うのも厳しいです。
(正しくは「使おうとするとほとんどでGPL化しなければならない=コードを公開する必要が生じる」)