- 2009-01-20 (火) 14:13
- PECL
PHPだけだとやはり遅かったり重かったりする処理があるのでPHPにC言語を組み込んで良いように使ってみようという試み.というわけで,PECLを作ってみたくなったので作ってみましょう.今回はCodegenやらそういう高機能な物は使わず(というよりか使い方をまだわからないので),ソースをダウンロードした時にext内に入っているext_skelスクリプトを使ったPECLの作成方法をば.ただ,どちらにしろ情報が少ないのであらぬことを言っていたりすることも多々あるかもなので参考までに.
基礎編
ダウンロードからphpizeまで
まずPHPのソースコードをダウンロードしてきます.その中のextの下にext_skelスクリプトがあるので以下のように実行してください.(今回はiwordというPECLを作るのでiwordと書かれた部分は作りたいextension名にしてくださいね.)
002: $ ./ext_skel --extname=iword
次にconfigure.m4を開きOtherwise use enableの下3行のコメントアウト解除します.
002:
003: PHP_ARG_ENABLE(iword, whether to enable iword support,
004: Make sure that the comment is aligned:
005: [ --enable-iword Enable iword support])
プロトタイプのコンパイル.
002: $ ./configure
003: $ make
この時点でconfirm_iword_compiled()が組み込まれたiword.soがmodulesの下にできました.
ためしに実行する場合は以下のようにして実行します.
関数の追加
コンパイルができることが分かったのでiword.cを開きPHP向け関数を追加します.
002: // PHP_FE(confirm_iword_compiled, NULL)
003: // ※PHP_FEには","が含まれているので書かない
004: PHP_FE(iword_autolink, NULL)
005: PHP_FE(iword_autolink2, NULL)
006: {NULL, NULL, NULL}
007: };
002: {
003: return;
004: }
005:
006: PHP_FUNCTION(iword_autolink2)
007: {
008: return;
009: }
次にphp_iword.hを開きます.
002: PHP_FUNCTION(iword_autolink2);
何もしない関数ですが以上のようにして関数を追加できるので覚えておきましょう.
応用編
今回作るプログラムはPECL化するコードと実際のコードをできる限り分離したいので,実際のコードはinclude/iword.cの中に入れたとします.しかしsoファイルを作る時にそのままだとコンパイルもリンクもされないのでエラーが出てしまうので,configure.m4をいじります.
include/iword.cを追加するために以下を追加してください.
002: PHP_NEW_EXTENSION(iword, iword.c include/iword.c, $ext_shared)
003: // コメントアウトを解除
004: PHP_SUBST(IWORD_SHARED_LIBADD)
次に全体を作り直します
002: $ ./configure
003: $ make
これで一応出力されるsoファイルにはinclude/iword.oが組み込まれるようになりました.iword.cからinclude/iword.hを読み込めば実際に使うことができます.
参考リンク
PHP Extensionを作ろう — コンパイルの方法等基礎の辺り
Tnder Surrender — 込み入ったところの説明
- Newer: TopCoder SRM 433
- Older: Amazon EC2
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://imoz.jp/2009/01/pecl/trackback/
- Listed below are links to weblogs that reference
- PECLを作る from 超現実いもす(imos)の日記