最近需要自己编译windows版本的nginx,为研究源码做个准备。找了一大堆资料,看的脑袋疼,交叉编译真是比较麻烦,比linux麻烦多了,整了几个小时才完成。。
感谢前辈们的参考资料,但是应该大家碰到的问题不完全一致,可能和机器以及下载的版本有关。有些坑踩完了后边估计可能忘了,极力回想了一下补了一篇文章。欢迎补充。
1.下载并安装msys2,用于生成makefile文件
2.电脑需要有vs环境,使用它的nmake编译,我用的vs2017
3.下载nginx-rtmp相关的依赖,三个包准备好Openssl、Pcre、Zlib
4.下载并安装perl5,安装后需要重启机器,在cmd下perl才能正常运行,否则perl不生效。控制台输入perl -v可以显示perl的版本。
5.下载并安装tortoisehg,和svn是一个公司出的,版本管理软件,用来下载nginx源码使用。很多教程所说的mercurial,和这个是一个东西。
6.下载并安装nasm,注意是exe文件,如果环境变量中没有,需要手动添加进去,nasm编译nginx的一个环境依赖。
7下载并安装sed,注意也是exe文件。将C:\Program Files (x86)\GnuWin32\bin配置到环境变量path中。
8.运行cmd,切入tortoisehg的主目录,执行命令:(获取nginx源码)
hg clone http://hg.nginx.org/nginx
9.获取完毕后,在TortoiseHg下生成了nginx目录
10.Nginx下创建目录供后续使用nginx/objs/lib,将第三步下载的几个依赖库放进这个目录下
11.打开msys2,生成makefile文件
auto/configure --with-cc=cl --builddir=objs --prefix= --conf-path=conf/nginx.conf --pid-path=logs/nginx.pid --http-log-path=logs/access.log --error-log-path=logs/error.log --sbin-path=nginx.exe --http-client-body-temp-path=temp/client_body_temp --http-proxy-temp-path=temp/proxy_temp --http-fastcgi-temp-path=temp/fastcgi_temp --http-scgi-temp-path=temp/scgi_temp --http-uwsgi-temp-path=temp/uwsgi_temp --with-cc-opt=-DFD_SETSIZE=1024 --with-pcre=objs/lib/pcre-8.00 --with-zlib=objs/lib/zlib-1.2.11 --with-openssl=objs/lib/openssl-1.1.1k --with-select_module --with-http_ssl_module --add-module=objs/lib/nginx-rtmp-module
生成的文件
11特别注意,如果直接用nmake来编译,会报错,所以需要修改几个文件,绕过这几个报错
修改这个文件,将其中的-W4修改为-W3
修改这个文件,将其中的ms\do_ms 改为ms\do_nasm
Perl也会有个错误“you may need to install the Win32::Console module”,
Can't locate Win32/Console.pm in @INC (you may need to install the Win32::Console module) (@INC contains: C:\Perl64\site\lib C:\Perl64\lib) at C:\Perl64\lib/ActivePerl/Config.pm line 400.
修改C:\Perl64\lib\ActivePerl\Config.pm,400行,将下边那些全部注掉
12.启动vs的编译工具
13.开始执行编译nmake -f objs/Makefile
14.编译完成
此时exe已经生成了,只是sed的环境配置的有问题,不影响生成,不用理会。
后来发现确实是忘了配置sed的环境变量。
exe编译成功
15.使用rtmp,这个不赘述了。来找带rtmp模块的自然也会配置了。把exe文件替换一下原来的就可以了。
16.另外,rtmp模块的代码之前编译linux版的时候就有了。这里就没有下载,可以和nginx源码一样的下载方式来获取。
MinGW我尝试过,感觉是个坑,编译出来的东西运行时还提示依赖mingw,很明显不是我们想要的。总不能服务器上还装一套mingw,所以就换了思路来做。
参考资料:
https://www.cnblogs.com/KendoCross/p/7585654.html
https://blog.csdn.net/zhangzq86/article/details/105100942
https://blog.csdn.net/longji/article/details/52369618 (这篇参考价值最大)
使用的各个环境的版本:
资源链接
https://download.csdn.net/download/luiio/19145869?spm=1001.2014.3001.5501