1. 配置环境 先参考《在Windows下编译Windows版本的Nginx》所述,配置mingw的运行环境;然后修改 /usr/local/etc/profile.local 假设Windows SDK安装在 D:\Program Files\Microsoft SDKs, VC2010安装在E:\Program Files\Microsoft Visual Studio 10.0,配置如下变量:

vi /usr/local/etc/profile.local
PATH="${PATH}:/opt/bin:/e/Program Files/Microsoft Visual Studio 10.0/VC/lib:/e/Program Files/Microsoft Visual Studio 10.0/VC/include:/e/Program Files/Microsoft Visual Studio 10.0/VC/bin:/e/Program Files/Microsoft Visual Studio 10.0/Common7/IDE:/d/Program Files/Microsoft SDKs/Windows/v7.0A/bin:"
LIB="E:\Program Files\Microsoft Visual Studio 10.0\VC\LIB;E:\Program Files\Microsoft Visual Studio 10.0\VC\ATLMFC\LIB;D:\Program Files\Microsoft SDKs\Windows\v7.0A\lib;"
LIBPATH="D:\WINDOWS\Microsoft.NET\Framework\v4.0.30319;D:\WINDOWS\Microsoft.NET\Framework\v3.5;E:\Program Files\Microsoft Visual Studio 10.0\VC\LIB;E:\Program Files\Microsoft Visual Studio 10.0\VC\ATLMFC\LIB;"
export LIB LIBPATH

使变量生效:

source /usr/local/etc/profile.local

2. 执行脚本

./configure --prefix=. --sbin-path=nginx --with-cc-opt="-D FD_SETSIZE=4096 -I \"d:\Program Files\Microsoft SDKs\Windows\v7.0A\include\" -I \"e:\Program Files\Microsoft Visual Studio 10.0\VC\include\"" --without-http_rewrite_module --without-http_gzip_module --with-cc=cl

修改Makefile,删除告警选项-W4 -WX

vi objs/Makefile
CFLAGS =  -O2  <strong>-W4 -WX</strong> -nologo -MT -Zi -D FD_SETSIZE=4096 -I "d:\Program Files\Micr.....................

修改nginx.c, 删除255行;

        if (ngx_show_configure) {
#ifdef NGX_COMPILER
            ngx_log_stderr(0, "built by " NGX_COMPILER);
#endif
#if (NGX_SSL)
#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
            ngx_log_stderr(0, "TLS SNI support enabled");
#else
            ngx_log_stderr(0, "TLS SNI support disabled");
#endif
#endif
            /*
            ngx_log_stderr(0, "configure arguments:" NGX_CONFIGURE);
            */
        }

3. 编译

nmake
.............
l objs/nginx.exe
-rwxr-xr-x 1 l37366 Administrators 610304 Jul 13 10:19 objs/nginx.exe

4. 运行 报错了,堆访问异常。修改下代码,ngx_shmem.c:22

- (void) ngx_sprintf(name, "%V_%s%Z", &shm->name, ngx_unique);
+ (void) ngx_snprintf(name, shm->name.len + 2 + sizeof(NGX_INT32_LEN),
+ "%V_%s%Z", &shm->name, ngx_unique);

重新编译,可以运行了。


Simon Lee

My blog