Windows環境のRedmineにて、RedmineのユーザとSubversionのユーザを同期して使用したい(4)
先週の日記(id:sikakura:20101126)からの続きで、いよいよmod_authn_mysqlのソースをビルドしてみたいと思います。
mod_authn_mysqlのソースコード(http://www.gknw.net/development/apache/httpd-2.2/win32/modules/mod_authn_mysql-2.2.3-w32.zip)
をダウンロードしてきました。
ビルド環境ですが、前回と同様に、
- Microsoft Visual Studio 2005
- Windows Server 2003 SP1 Platform SDK
が入っていることが前提です。
また、前回までで用意してきた環境にある成果物
も必要になります。
ダウンロードしてきたファイルを解凍すると、以下のような感じになっています。
mod_authn_mysql.dspがVC6++のプロジェクトなのですが、VisualStudio2005の環境でもダブルクリックで開くことが可能です。
のようなポップアップダイアログが表示されますが、「はい」で先に進みます。
ここから変更する箇所が多いです。以下に箇条書きにします。
- アクティブな構成をDebugからReleaseにします(これはどちらでも良いのですが^^;)
- プロジェクトの構成プロパティを以下のように変更
- ビルドを実行する
- 結果を確認する
問題なければ、エラーなくビルドが終了します。
私場合、初回以下のような「外部シンボル XXX は未解決です。」のエラーがたくさん出ました。
1>------ ビルド開始: プロジェクト: mod_authn_mysql, 構成: Release Win32 ------
1>リンクしています...
1>C:\\httpd-2.2.17\os\win32\BaseAddr.ref : warning LNK4198: 基本キー 'mod_authn_mysql' が見つかりません。既定を適用します。
1> ライブラリ .\Release/mod_authn_mysql.lib とオブジェクト .\Release/mod_authn_mysql.exp を作成中
1>mysqlclient.lib(md2.obj) : error LNK2001: 外部シンボル "_memset" は未解決です。
1>mysqlclient.lib(ctype-czech.obj) : error LNK2001: 外部シンボル "_memset" は未解決です。
1>mysqlclient.lib(ctype-win1250ch.obj) : error LNK2001: 外部シンボル "_memset" は未解決です。
1>mysqlclient.lib(ctype-big5.obj) : error LNK2001: 外部シンボル "_memset" は未解決です。
1>mysqlclient.lib(deflate.obj) : error LNK2001: 外部シンボル "_memset" は未解決です。
1>mysqlclient.lib(xml.obj) : error LNK2001: 外部シンボル "_memset" は未解決です。〜中略〜
1>OLDNAMES.lib(read.obi) : error LNK2001: 外部シンボル "__imp___read" は未解決です。
1>OLDNAMES.lib(fileno.obi) : error LNK2001: 外部シンボル "__imp___fileno" は未解決です。
1>OLDNAMES.lib(fdopen.obi) : error LNK2001: 外部シンボル "__imp___fdopen" は未解決です。
1>OLDNAMES.lib(getcwd.obi) : error LNK2001: 外部シンボル "__imp___getcwd" は未解決です。
1>OLDNAMES.lib(chdir.obi) : error LNK2001: 外部シンボル "__imp___chdir" は未解決です。
1>LINK : error LNK2001: 外部シンボル "__load_config_used" は未解決です。
1>Release/mod_authn_mysql.so : fatal error LNK1120: 外部参照 106 が未解決です。
1>ビルドログは "file://c:\batconfig\mod_authn_mysql\Release\BuildLog.htm" に保存されました。
1>mod_authn_mysql - エラー 459、警告 1
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========
私の環境の場合、原因はmysqlclient.libを作成したプロジェクトの
プロジェクト構成>C/C++>コード生成>ランタイムライブラリがマルチスレッド DLL (/MD)でした。
このような設定でビルドしたmysqlclient.libを使用すると、出来上がるmod_authn_mysql.soが
Visual Studio 2005のランタイムライブラリ依存(MSVCR80.DLL)になってしまいます。
DependencyWalkerで見ると以下のようになっています。
(LIBHTTPD.DLLとLIBAPR-1.DLL、LIBAPRUTIL-1.DLLはApache系のDLLなのでOKとしました)
↑よろしくないモジュールの依存関係
↑おそらくOKのモジュールの依存関係
出来上がったmod_authn_mysql.soをApacheに組み込んで再起動してみましょう。
問題がなければうまく起動してくれるはずです。私の環境ではめでたく起動しました。
あがらない場合は依存関係にあるDLLを調べてみることをお勧めします。
さて、ようやくApache、MySQL、mod_authn_mysqlすべてビルドできるところまでたどり着きました。
最後は、mod_authn_mysqlにsha1を組み込んで動作を確認したいと思います。