フォーラム: ヘルプ (スレッド #34072)

Windows でのコンパイル (2013-05-30 23:35 by shin-ohnishi #68959)

初めまして。

Simplate がとても良さそうなのでローカルの開発環境(XAMPP on Win7)で試したく、久々にコンパイルをしようと思いました。
Visual Studio 2008 は以前に入手していたので、現環境に再インストール。
ローカルの XAMPP は、PHP5.3.8 だったのでそのバージョンのソースを入手。
展開場所は、C:\src ではなくVisual Studio 2008 のプロジェクトフォルダ。
それ以外は<a href="http://sourceforge.jp/projects/simplate/wiki/Install.for.windows">wikiのページ</a>に従って配置して、何も考えずにリビルドしたところ
1>.\simplate.cpp(31) : fatal error C1083: include ファイルを開けません。'config.w32.h': No such file or directory
となりました。

どのファイルを指しているのか分かりませんでしたが、wiki で例に挙がっている PHP5.2.11 と 5.3.8 を見比べたら main/config.w32.h がありません。
内容が分かりませんが、5.2.11 から 5.3.8 へコピーしました。

再度リビルドすると今度は
1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\\include\Ws2tcpip.h(502) : error C2371: 'socklen_t' : 再定義されています。異なる基本型です。
1> ..\..\main\php.h(150) : 'socklen_t' の宣言を確認してください。
となります。

Ws2tcpip.h を修正する訳にはいきませんから、php.h の方をコメントアウトしました。

再度、リビルドすると正常終了となりましたが、php.ini の書換などして Apache を起動すると
PHP Startup: simplate: Unable to initialize module
Module compiled with build ID=API20090626,TS
PHP compiled with build ID=API20090626,TS,VC9
These options need to match
というWarning のダイアログが現れます。

VC2008 は VC9 なハズなので、VC9 が出て来ないのは何故でしょう?
バイナリエディタで見てみると、他のモジュールにはチャンと「API20090626,TS,VC9」という文字列が存在しますが、僕のコンパイルしたものには「API20090626,TS」としかありません。

何らかの設定が必要なのでしょうか?
それと、ここまでの手順は合っているのでしょうか?
回答いただけると嬉しいです。

RE: Windows でのコンパイル (2013-06-01 20:18 by shin-ohnishi #68968)

とりあえず Apache が起動できるところまで来ましたので報告致します。

ググってみたら、PHP_COMPILER_ID が未定義だからというのが見つかりました。
http://stackoverflow.com/questions/3641751/compiling-a-php-extension-with-visual-studio-2008-module-id-dont-match-with-ph

そこで、公式サイト(?)にある様にSDK をいれて PHP のコンパイルからやってみました。
https://wiki.php.net/internals/windows/stepbystepbuild

どんなオプションを選べばよいのか分かりませんでしたが適当に
configure --disable-all --enable-cli
nmake

としたところ、main/config.w32.h に
#define PHP_COMPILER_ID "VC9"
が出てきました。
やはり他所から持ってきたものではNGなんですね。

Zend/zend_build.h よりも前に定義されていれば良いのだろうと、simplate.cpp の先頭で
#define PHP_COMPILER_ID "VC9"
定義してやったら、Apache も無事起動できました。

Simplate のコンパイルに 5.2.11 の main/config.w32.h の内容がいつまで使えるのか不明ですが、当面は上記の「なんちゃって」で対応できそうな感じが...
開発の方のフォローがあると嬉しいです。


参考までに、Ubuntu 12.10(quantal) ではコンパイル出来なくなったという記事もありました。
http://www.plustar.jp/lab/blog/?p=12296
#68959 への返信