我有两个关于NGINX的问题:
是否有人已经使用Visual Studio编译过NGINX?我想创建一个VS9项目来编译NGINX。
这是我真正的需求,有没有办法将NGINX编译成Lib或DLL文件?
我有两个关于NGINX的问题:
是否有人已经使用Visual Studio编译过NGINX?我想创建一个VS9项目来编译NGINX。
这是我真正的需求,有没有办法将NGINX编译成Lib或DLL文件?
我刚刚完成了一个用于nginx的Visual Studio 2010项目的构建。这个过程并不是完全直接,所以我会尽力详细介绍我所学到的所有内容。这是一个几小时到几天的过程,具体取决于你的经验。
步骤1:你必须首先按照在Windows上构建nginx指南。这不仅会构建nginx,还会创建您在创建Visual Studio项目时使用的 .c 和 .h 文件。没有这些文件它是运行不起来的。(更多信息,请参见此处。)
如果像我一样对Unix不是很熟悉,上述指南会有一些未解答的问题。因此,我首先会补充该指南的一些技巧,然后再告诉您有关为Visual Studio创建项目的更多信息。
首先,按照以上所有步骤进行操作。安装MSYS、Strawberry Perl、Mercurial,并下载PCRE、zlib和OpenSSL库。然后按照以下步骤进行操作:
1)以管理员身份打开命令提示符。然后运行您的Visual Studio vc \ vcvarsall.bat文件,以设置环境变量并将VC用作编译器。您的路径可能不同,但我使用的命令是:
"C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
4) 您需要确保使用的perl版本是strawberry perl,而不是msys附带的版本。输入:which perl
如果您得到类似于“/bin/perl.exe”的内容,则是错误的perl版本,您需要修复路径。您可以尝试更改此设置(如我所做,但没有成功),或者您可以禁用msys附带的perl版本。我只是将perl.exe重命名为perl_UNUSED.exe在我的msys安装中:
C:\MinGW\msys\1.0\bin
无论你做什么,请确保“which perl”显示Strawberry Perl的路径,然后再继续。
5) 我还将msys\1.0\bin目录中的"link.exe"重命名为"link_UNUSED.exe",这样就不会使用它了。(即将其重命名为“link_UNUSED.exe”)
我认为这是因为,在上面的第1步中,“vcvarsall.bat”将所有内容都设置为使用Microsoft C的编译器/链接器,但是在第2步中,链接器被更改为使用Msys的链接器。你需要使用Microsoft的链接器。
要验证将其重命名为“link_UNUSED.exe”是否成功,请键入: which link 并确保它指向Visual Studio 10的链接器,而不是与msys一起提供的link.exe。
6) 首先“cd nginx”,然后在nginx文件夹内创建一个objs/lib文件夹树。按照guide中提到的方法在此处解压pcre、zlib和openssl。
7) 当前目录仍为nginx时,运行nginx的自动配置脚本,但首先修改以下命令以更改sopenssl、pcre和zlib的路径,使其正确安装在objs/lib中(您的版本号可能不同)。我使用的命令是:
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 \
--with-cc-opt=-DFD_SETSIZE=1024 \
--with-pcre=objs/lib/pcre-8.33 \
--with-zlib=objs/lib/zlib-1.2.8 \
--with-openssl=objs/lib/openssl-1.0.1f \
--with-select_module --with-http_ssl_module --with-ipv6
**
第二部分:创建Visual Studio nginx项目**
创建一个空的Visual Studio命令行应用程序项目。将项目保存在您的nginx文件夹(根级别)中。请注意,在此步骤之前,您可以将nginx文件夹移动到您想要保存它的任何位置。
1)转到属性 -> VC ++目录并添加这些包含目录:
$(MSBuildProjectDirectory)\src\core $(MSBuildProjectDirectory)\src\event $(MSBuildProjectDirectory)\src\event\modules $(MSBuildProjectDirectory)\src\http $(MSBuildProjectDirectory)\src\http\modules $(MSBuildProjectDirectory)\src\http\modules\perl $(MSBuildProjectDirectory)\src\mail $(MSBuildProjectDirectory)\src\misc $(MSBuildProjectDirectory)\src\mysql $(MSBuildProjectDirectory)\src\os $(MSBuildProjectDirectory)\objs $(MSBuildProjectDirectory)\src\os\win32 $(MSBuildProjectDirectory)\objs\lib\openssl\ssl\include $(MSBuildProjectDirectory)\objs\lib\zlib $(MSBuildProjectDirectory)\objs\lib\pcre
注意:在此步骤之前,我进入了objs/lib并从zlib、pcre和ssl文件夹中删除了版本号。您也应该这样做,或者您应该修改上面的路径以匹配您安装的版本。我删除了版本号,这样我就可以在将来更新这些库的新版本而不破坏我的项目。
点击“宏>>”按钮,并验证MSBuildProjectDirectory路径是否为您的nginx文件夹的路径。
2)同样将这些路径添加到库目录中:
$(MSBuildProjectDirectory)\objs\lib\openssl\ssl\lib\ $(MSBuildProjectDirectory)\objs\lib\pcre\ $(MSBuildProjectDirectory)\objs\lib\zlib\
如果objs/lib文件夹的内容仍然有版本号,则再次修改这些路径以包括版本号。
3)按以下方式更改这些项目属性:
C/C++ General: 将“将警告视为错误”设置为否(WX-) Preprocessor: 添加这些预处理器定义: WIN32 NGX_WIN32 NGX_MAIL_SSL NO_SYS_TYPES_H FD_SETSIZE=1024
链接器: 输入:将以下内容添加到附加依赖项中: ws2_32.lib pcre.lib ssleay32.lib libeay32.lib crypt32.lib zlib.lib
4)关闭Visual Studio解决方案。用好的文本编辑器(如Notepad ++)打开项目文件(以.vcxproj结尾)。 (首先备份一份,以防出现问题。)还要用文本编辑器打开nginx\objs\makefile。
在makefile中不太远离顶部,您将看到一个类似于以下内容的部分:
objs/nginx.exe: objs/src/core/nginx.obj \ objs/src/core/ngx_log.obj \ objs/src/core/ngx_palloc.obj \ objs/src/core/ngx_array.obj \ .... objs/ngx_modules.obj \ objs/nginx.res \ objs/lib/pcre-8.33/pcre.lib \ objs/lib/zlib-1.2.8/zlib.lib $(LINK) @<<
同样,在Visual Studio文件中,如果您已添加任何源代码(在此步骤之前添加任何文件,以便您可以看到我在谈论什么),您将看到类似于以下内容的部分:
checking for C compiler ... not found auto/configure: error: C compiler cl is not found
不确定为什么?有人知道吗? - Rahil Wazir