Home > PECL > PECLを作る

PECLを作る このエントリーを含むはてなブックマーク

PHPだけだとやはり遅かったり重かったりする処理があるのでPHPにC言語を組み込んで良いように使ってみようという試み.というわけで,PECLを作ってみたくなったので作ってみましょう.今回はCodegenやらそういう高機能な物は使わず(というよりか使い方をまだわからないので),ソースをダウンロードした時にext内に入っているext_skelスクリプトを使ったPECLの作成方法をば.ただ,どちらにしろ情報が少ないのであらぬことを言っていたりすることも多々あるかもなので参考までに.

基礎編

ダウンロードからphpizeまで

まずPHPのソースコードをダウンロードしてきます.その中のextの下にext_skelスクリプトがあるので以下のように実行してください.(今回はiwordというPECLを作るのでiwordと書かれた部分は作りたいextension名にしてくださいね.)

001: $ cd php*.*-*****/ext
002: $ ./ext_skel --extname=iword

次にconfigure.m4を開きOtherwise use enableの下3行のコメントアウト解除します.

001: dnl Otherwise use enable:
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])

プロトタイプのコンパイル.

001: $ phpize
002: $ ./configure
003: $ make

この時点でconfirm_iword_compiled()が組み込まれたiword.soがmodulesの下にできました.
ためしに実行する場合は以下のようにして実行します.

001: $ php -d extension_dir=modules -d extension=iword.so test.php

関数の追加

コンパイルができることが分かったのでiword.cを開きPHP向け関数を追加します.

001: const zend_function_entry iword_functions[] = {
002: // PHP_FE(confirm_iword_compiled, NULL)
003:     // ※PHP_FEには","が含まれているので書かない
004:     PHP_FE(iword_autolink, NULL)
005:     PHP_FE(iword_autolink2, NULL)
006:     {NULLNULLNULL}
007: };

001: PHP_FUNCTION(iword_autolink)
002: {
003:     return;
004: }
005:
006: PHP_FUNCTION(iword_autolink2)
007: {
008:     return;
009: }

次にphp_iword.hを開きます.

001: PHP_FUNCTION(iword_autolink);
002: PHP_FUNCTION(iword_autolink2);

何もしない関数ですが以上のようにして関数を追加できるので覚えておきましょう.

応用編

今回作るプログラムはPECL化するコードと実際のコードをできる限り分離したいので,実際のコードはinclude/iword.cの中に入れたとします.しかしsoファイルを作る時にそのままだとコンパイルもリンクもされないのでエラーが出てしまうので,configure.m4をいじります.

include/iword.cを追加するために以下を追加してください.

001: // PHP_NEW_EXTENSIONから始まる行があるので以下のように変更
002:   PHP_NEW_EXTENSION(iword, iword.c include/iword.c, $ext_shared)
003:   // コメントアウトを解除
004:   PHP_SUBST(IWORD_SHARED_LIBADD)

次に全体を作り直します

001: $ phpize
002: $ ./configure
003: $ make

これで一応出力されるsoファイルにはinclude/iword.oが組み込まれるようになりました.iword.cからinclude/iword.hを読み込めば実際に使うことができます.

参考リンク

PHP Extensionを作ろう — コンパイルの方法等基礎の辺り
Tnder Surrender — 込み入ったところの説明

Comments:0

Comment Form
Remember personal info

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)の日記

Home > PECL > PECLを作る

Search
Feeds
Meta

Return to page top