2011年7月23日土曜日

ApacheモジュールをWindows環境で開発⑤

今回は「mod_hoge.so」というモジュールを作ります。
/hoge/にアクセスがあった場合、「The sample page from mod_hoge.c」というメッセージをだす
簡単なものです。

適当なフォルダ(C:\work\module のような感じ)で以下のコマンドを打ちます。
apxs -g -n hoge

作ったぞ!的なメッセージがでます。
Use of assignment to $[ is deprecated at C:\ApacheSoftware\Apache2.2\bin/apxs.bat line 120.
Creating [DIR]  hoge
Creating [FILE] hoge/Makefile
Creating [FILE] hoge/mod_hoge.c
Creating [FILE] hoge/.deps

ディレクトリが作成され、
3つのファイルが作成されました。

C:\work\module>tree /f hoge
フォルダ パスの一覧
ボリューム シリアル番号は XXXX-9035 です
C:\WORK\MODULE\HOGE
    .deps
    Makefile
    mod_hoge.c


次はコンパイルです。(ソースファイルもいじらず、このままいきます。)
自動で作成されたhogeディレクトリに移動してください。
詳しい人ならmakeでビルドできるようにMakefileを修正するでしょうが、
私にはできないので、gccコマンドで堅実にコンパイルしていきます。

gcc -mwindows -I C:\ApacheSoftware\Apache2.2\include -L C:\ApacheSoftware\Apache2.2\lib -c mod_hoge.c

※includeディレクトリとlibディレクトリはご自分の環境に合わせて変更してください。

エラーです....
----------------------------------------
C:\work\module\hoge>gcc -mwindows -I C:\ApacheSoftware\Apache2.2\include -L C:\A
pacheSoftware\Apache2.2\lib -c mod_hoge.c
In file included from C:/ApacheSoftware/Apache2.2/include/ap_config.h:25,
                 from C:/ApacheSoftware/Apache2.2/include/httpd.h:43,
                 from mod_hoge.c:40:
C:/ApacheSoftware/Apache2.2/include/apr.h:618:1: warning: "IN6_IS_ADDR_V4MAPPED"
 redefined
In file included from C:/ApacheSoftware/Apache2.2/include/apr.h:101,
                 from C:/ApacheSoftware/Apache2.2/include/ap_config.h:25,
                 from C:/ApacheSoftware/Apache2.2/include/httpd.h:43,
                 from mod_hoge.c:40:
C:/Perl/site/lib/auto/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/ws2
tcpip.h:236:1: warning: this is the location of the previous definition
In file included from C:/ApacheSoftware/Apache2.2/include/httpd.h:43,
                 from mod_hoge.c:40:
C:/ApacheSoftware/Apache2.2/include/ap_config.h:234:28: ap_config_auto.h: No suc
h file or directory
C:/ApacheSoftware/Apache2.2/include/ap_config.h:235:30: ap_config_layout.h: No s
uch file or directory
----------------------------------------

ワーニング2つはあえて無視(笑)したとして、
ヘッダファイルが2つ(ap_config_auto.hとap_config_layout.h)ありませんと出ています。
そんなファイル確かにないし、、、
いろいろ調べたり、試したりしましたが、結論としてこの2つはインクルードしないことにしました。
(いいのかどうかは不明です。たぶんダメだと思います。情報お待ちしております。)
ap_config.hの中で上記2ファイルをインクルードしようとしている箇所をコメントアウトし、
再度コンパイルします。

成功するとmod_hoge.oができます。

続いて、.soファイルをつくります。以下のようなgccを実行してください。
gcc -mwindows -I C:\ApacheSoftware\Apache2.2\include -L C:\ApacheSoftware\Apache2.2\lib -shared -o mod_hoge.so mod_hoge.o -llibhttpd

成功するとmod_hoge.soができます。

あとはapacheの設定です。
①できたmod_hoge.soファイルをモジュールのフォルダに移動してください。(私の場合、C:\ApacheSoftware\Apache2.2\modules)
②httpd.confに以下の行を追加(LoadModule が並んでいるところの最後尾)
LoadModule hoge_module modules/mod_hoge.so
③もう1つhttpd.conf の下のほうに
<Location /hoge>
SetHandler hoge
</Location>

Apacheを起動してhttp://localhost/hogeと、入力してください。

The sample page from mod_hoge.c とブラウザに表示されれば成功です。

0 件のコメント:

コメントを投稿