モジュールのApache1.3からApache2.0への移植
自作モジュールをApache1.3からApache2.0へ移植してみました。
移植中はセグメントフォルト多発だったので皆さん気をつけましょう。
Apache2では、APIが大きく変更されています。
ハンドラの登録や実行順序の制御方法、関数名・型名いろいろと違います。
というわけなのでApache2にモジュールを移植する上で躓いたところをメモとして残しておきます。
ドキュメント
移植に特化したドキュメントは「モジュールの Apache 1.3 から Apache 2.0 への移植」。(ちょっと情報が少ない)
なおリンクが張られている
http://docx.webperf.org/
http://lxr.webperf.org/
は、悲しいことにリンク切れです。
雛形作成
apxsで雛形作成、雛形がだいぶ変わっているの注意。
apxs -g -n hello
ハンドラの登録
- ap_hook_handler・・・コンテンツハンドラを登録。
- ap_hook_type_checker・・・find_typesと名前が似ているのできっとそうに違いない。
- ap_hook_log_transaction・・・ログフェーズに違いない。
ログ用の関数
APLOG_MARKがないと言われた。
ap_log_errorに対応するものはなんだろうか。APIドキュメントの探し方が悪いのか見つからない。
Apache2のソースをダウンロードして、モジュールのソースを読んでみると、どうも引数が一つ増えている。
APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, r->server
mod_proxyのソースを見ると0を入れているので、とりあえず0で。
さらにAPLOG_MARKは
#include "http_log.h"
のように明示的に include してやれば解決した。
名前の変更
pool -> apr_pool_t
ap_pstrcat -> apr_pstrcat
などなど。
ファイルAPI
ap_pfopen ->?
ap_pfclose ->?
廃止されたのかな?
srclib/apr/include/apr_file_io.hを見ると、ぜんぜん違うIFのAPIがあるけど、これに代わったのだろうか?
とりあえず fopen/fcloseとして保留。
LIBS=ライブラリ名が効いていない?
ldd mod_test.soしても、指定したライブラリを見ていない。
*.makファイルがincludeされているのをずっと辿っていくと
LDFLAGSが正解のようだ。
LDFLAGS+=-ltest
これで解決
続き:id:higepon:20050817:1124265060
Apacheモジュール プログラミングガイド (Advanced Server‐side programmingシリーズ)
- 作者: 小山浩之
- 出版社/メーカー: 技術評論社
- 発売日: 2003/08/01
- メディア: 単行本
- 購入: 1人 クリック: 81回
- この商品を含むブログ (26件) を見る