Main Contents
Visual StudioでらくらくApacheモジュール開発
まともに使えるCの開発環境はMicrosoftのVisual Studioだけ、というヘタレながら、ただいまApacheのモジュール開発に挑戦中。
いくつか準備をすれば、Visual C++ 2003(以下VC++2003)でもApacheモジュールを開発することができる。
先生になった本が主にApache 1.3系を対象としているため、Apacheは1.3.33を対象にしている。
技術評論社 (2003/08/01)
売り上げランキング: 56,913
通常24時間以内に発送
おおまかな手順
- ActivePerlのインストール
- ソースコード付きパッケージのインストール
- ApacheをVC++2003でコンパイルしなおす
- VC++2003の環境設定
- モジュールのテンプレートコードの生成
- モジュールの実装
- httpd.confファイルの変更
- デバッグ
- リリース
ActivePerlのインストール
Apacheモジュールの開発ユーティリティであるapxsはPerlのプログラムなので(UNIXのも実はそうだったのか?)、ActivePerlをインストールしておく。
ソースコード付きパッケージのインストール
まずはソースコード付きのパッケージ、
http://archive.apache.org/dist/httpd/binaries/win32/
にある
apache_1.3.33-win32-x86-src.msi
をインストール。
起動オプションは、サービスではなくRun when started manually, only for meを選ぶ。
Visual Studio 2003でApacheのコンパイル
Visual Studio 2003でのApacheモジュール開発でつまづいた点がひとつ。
fgetsやFILEポインタなど基本的なライブラリの扱いでコケてしまうのだ。
それはWin32 ApacheのバイナリをコンパイルしているのはVC++6で、VC++2003では、printfやfopenを初めとするCの基本的なライブラリの実装において、互換性が損なわれているからだ。
これはハマった。
[Python-Dev] PyRun_ with file name
これを解決するには、
- VC++6でApacheモジュールを開発する
- VC++2003でApacheをコンパイルしなおす
のいずれかしかないだろう。もちろんここでは後者。
- C:\Program Files\Apache Group\Apache\src\Apache.dswを開く。
- 「現在のVisual C++プロジェクト形式に変換されなければなりません・・・」と出るので、「すべてはい」としてソリューションのプロジェクトを全て新しい形式(..vcproj)に変換する。ただしそのままビルドしても最後のインストール用のMakeスクリプトでいくつかエラーがでる。
- pdb(デバッグ用のシンボルDBだっけ?)の出力のいくつかに_srcというサフィックスがついているにも関わらず、インストール用Makeスクリプトはそうなっていない。ちょっと強制的だけど、こういったソフトをつかって、"C:\Program Files\Apache Group\Apache\src"以下の"_src"を全て削除(空文字列に置換)。
Devas(Windows95/98/Me/ユーティリティ)
- まずApacheプロジェクトをビルド。
- それからソリューションのビルド。32個のプロジェクトのビルドが成功すればOK。
ここでコンパイルされたApacheは、"C:\Apache"にインストールされ、実行ファイルはC:\Apache\Apache.exe、設定ファイルは"C:\Apache\conf\httpd.conf"となる。
Visual Studioの環境設定
Visual Studioにインクルードとライブラリのパスを通す。
ツール-オプション-プロジェクト-VC++ディレクトリ
で、インクルードファイルに
C:\Apache\include
ライブラリファイルに
C:\Apache\libexec
を追加。
モジュールのテンプレートコードを生成
モジュールの実装はまず、apxsでプロジェクト雛形を作る。
コマンドプロンプトで、
C:\Program Files\Apache Group\Apache\src\support
に移動し、
apxs.pl -g -n mymodule
を実行する(mymoduleは作成したいモジュール名に置き換えて)。
mymoduleフォルダと、その中にMakefile、mymodule.cが出来ていればOK。
次に、
をダウンロードして、mymoduleフォルダに入れる。
ファイル名をモジュール名にちなんだものに変更して、エディタで開き、mymodule→モジュール名に全置換。
Visual Studioからファイル-開く-プロジェクトを選び、準備した.vcprojファイルを開く。
モジュールの実装
実際にモジュールを実装し、ビルドしてみる。
C:\Apache\modules
に、
my_mymodule.so
ができているはず。
httpd.confの変更
Apacheがモジュールを読み込むようにhttpd.confを変更。次のディレクティブを追加。
LoadModule mymodule_module modules/mod_mymodule.so
AddModule mod_mymodule.c
とりあえず最初は
<Location /mymodule>
SetHandler mymodule
</Location>
として、/mymoduleにアクセスすることで起動するようにしておく。
デバッグ
プロジェクトの設定を開き、デバッグの設定において、コマンドラインを
C:\Apache\Apache.exe
引数に
-X
を設定する。
static int mymodule_handler(request_rec *r)
のいずれかのラインにブレークポイントを設定し、Visual Studioからデバッグを開始するとApache.exeが実行され、HTTP受付状態に。
http://localhost/mymodule
にアクセスし、ブレークポイントで止まることを確認。
Apache.exeはCtrl+Cで止めるのがお行儀がよいはずだが、なぜか例がが発生する。
pidファイルのクリーンナップができていないと、次回から毎回アラートが表示されるけど、とりあえずデバッガから強制終了するしかない。
リリース
あとはデバッグが完了すれば、UNIXに持って行って、apxsで制せされたMakefileをmakeしたりなんかすればOKでは。
まとめ
慣れた統合環境で作業できるのはらくらくだけど、準備はあまりらくらくじゃないな・・
- by 宮永邦彦
- at 2005年05月09日 02:08
- in プログラミング道
TrackBacks
トラックバックURL:


Post a comment