使用Visual Studio编译NGINX

  发布于 2023-01-30 09:45

我有2个关于NGINX的问题:

    是否有人已经使用Visual Studio编译NGINX?我想创建一个VS9项目来编译NGINX.

    这是我真正需要的,有没有办法将NGINX编译为Lib或DLL?

Vern Jensen.. 16

我刚刚为nginx构建了一个Visual Studio 2010项目.这个过程并不完全是直接的,所以我将尝试详细介绍我所学到的一切.这是一个数小时到几天的过程,具体取决于您的经验.

第1步:您必须首先按照指南在Windows上构建nginx.这不仅可以构建nginx,还可以创建在创建Visual Studio项目时使用的.c和.h文件.没有这些文件它将无法工作.(有关更多信息,请参阅此处.)

如果你对像我这样的Unix经验不足,上面的指南会留下一些悬而未决的问题.因此,我将首先使用我自己的提示充实该指南,然后再告诉您有关为Visual Studio创建项目的更多信息.

第一部分:使用MSYS编译windows的nginx

首先,按照上面给出的所有步骤操作.安装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"

我发现即使Strawberry Perl添加了3条路径(你可以通过检查你的PATH变量来验证),它仍然使用了错误的Perl.

2)运行msys.bat启动MSys.对我来说,MSys安装在MinGW目录中,所以我的路径是:C:\ MinGW\msys\1.0\msys.bat

如果成功,你应该看到绿色的这样的东西:JensenV @ AVWMA047LB~(除了你的用户名@ networkaddress而不是)在一个名为MINGW32的窗口中:〜

你可能想知道你的'主文件夹在哪里.它在msys\1.0\home下.所以在我的系统上,它就在这里:C:\ MinGW\msys\1.0\home\JensenV

如果您执行"ls"或"dir",则这是您最初所在的目录.

3)假设您按照上面的说明安装了Mercurial,您现在应该可以查看ngynx源代码:hg clone http://hg.nginx.org/nginx

这将进入上面提到的目录.

4)你需要确保使用的perl版本是草莓perl,而不是msys附带的版本.输入:perl

如果你得到类似"/bin/perl.exe"的东西,这是错误的perl,你需要修复你的路径.你可以弄乱这个(就像我做的那样,失败了)或者你可以禁用msys附带的perl版本.我刚刚在msys安装中将perl.exe重命名为perl_UNUSED.exe:

C:\ MinGW的\ MSYS\1.0\BIN

无论你做什么,确保"哪个perl"显示了草莓Perl之前的路径.

5)还在我的msys\1.0\bin目录中重命名为"link.exe":C:\ MinGW\msys\1.0\bin以便它未被使用.(即将其重命名为"link_UNUSED.exe")

我相信这是因为,在上面的步骤1中,您的"vcvarsall.bat"将所有内容设置为使用Microsoft C的编译器/链接器,但是在步骤2中,链接器已更改为使用Msys代替.您需要使用Microsoft.

要验证重命名为"link_UNUSED.exe"成功,请键入:哪个链接并确保它指向您的Visual Studio 10链接,而不是msys附带的link.exe.

6)首先"cd nginx"然后在nginx文件夹中创建一个objs/lib文件夹树.如指南中所述,在此处解压/解压缩pcre,zlib和openssl .

7)当你的当前目录仍然是nginx时,运行nginx的autoconfigure脚本,但首先修改下面的命令,改变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项目时使用的生成的.c和.h文件,并且相信我,您不希望以后在意识到需要不同选项时重做.

7)做到.

nmake -f objs/Makefile

如果成功,您刚刚编译的nginx.exe应该在您的home\YourUsername \nginx\objs文件夹中.即:C:\ MinGW\msys\1.0\home\JensenV \nginx\_ objs

此外,这些文件现在与nginx.exe位于同一文件夹中:ngx_auto_config.h ngx_auto_headers.h ngx_modules.c ngx_pch.c

您将在创建Visual Studio项目时使用它们.

8)喝啤酒.

**

第二部分:创建Visual Studio nginx项目

**

为命令行应用程序创建一个空的Visual Studio项目.将项目保存在nginx文件夹(根级别)中.请注意,在此步骤之前,您可以将msys文件夹移到msys之外的任何位置.

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++概述:将"将警告视为错误"设置为否(WX-)预处理器:添加这些预处理器定义: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文件中,如果您添加了任何源代码(在此步骤之前添加了您想要的任何文件,那么您可以看到我在说什么),您将看到如下内容:

创建一个只包含makefile中的.obj文件的新文档.在文本编辑器中使用"搜索和替换"来修改它们以匹配Visual Studio项目文件的格式(因此以.c />而不是.obj \结尾,并以

另外不要忘记将正斜杠更改为反斜杠.不要包含zlib.lib或pcre.lib行.我忘了你是否应该包括nginx.res.(可能不是.)

一旦确定格式正确,请保存Visual Studio项目并尝试打开它.如果makefile中的所有文件都显示在项目中,则表明您已正确完成.

5)还记得构建exe时nginx创建的那些特殊的.c和.h文件吗?您现在也想将它们添加到项目中.添加这些家伙:

ngx_modules.c ngx_pch.c

6)现在你已经准备好编译了!

老实说我可能已经遗忘了一些东西,所以你可能仍然有一些链接器或编译错误来修复,但这应该给你一个良好的开端!

注意:如果要更改nginx中包含的选项,则必须在上面的第I部分中执行新的自动/配置,新的nmake,然后在Visual Studio项目中包含其他源代码,并使用新的在Visual Studio项目中生成ngx_modules.c和ngx_pch.c文件.

1 个回答
  • 我刚刚为nginx构建了一个Visual Studio 2010项目.这个过程并不完全是直接的,所以我将尝试详细介绍我所学到的一切.这是一个数小时到几天的过程,具体取决于您的经验.

    第1步:您必须首先按照指南在Windows上构建nginx.这不仅可以构建nginx,还可以创建在创建Visual Studio项目时使用的.c和.h文件.没有这些文件它将无法工作.(有关更多信息,请参阅此处.)

    如果你对像我这样的Unix经验不足,上面的指南会留下一些悬而未决的问题.因此,我将首先使用我自己的提示充实该指南,然后再告诉您有关为Visual Studio创建项目的更多信息.

    第一部分:使用MSYS编译windows的nginx

    首先,按照上面给出的所有步骤操作.安装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"
    

    我发现即使Strawberry Perl添加了3条路径(你可以通过检查你的PATH变量来验证),它仍然使用了错误的Perl.

    2)运行msys.bat启动MSys.对我来说,MSys安装在MinGW目录中,所以我的路径是:C:\ MinGW\msys\1.0\msys.bat

    如果成功,你应该看到绿色的这样的东西:JensenV @ AVWMA047LB~(除了你的用户名@ networkaddress而不是)在一个名为MINGW32的窗口中:〜

    你可能想知道你的'主文件夹在哪里.它在msys\1.0\home下.所以在我的系统上,它就在这里:C:\ MinGW\msys\1.0\home\JensenV

    如果您执行"ls"或"dir",则这是您最初所在的目录.

    3)假设您按照上面的说明安装了Mercurial,您现在应该可以查看ngynx源代码:hg clone http://hg.nginx.org/nginx

    这将进入上面提到的目录.

    4)你需要确保使用的perl版本是草莓perl,而不是msys附带的版本.输入:perl

    如果你得到类似"/bin/perl.exe"的东西,这是错误的perl,你需要修复你的路径.你可以弄乱这个(就像我做的那样,失败了)或者你可以禁用msys附带的perl版本.我刚刚在msys安装中将perl.exe重命名为perl_UNUSED.exe:

    C:\ MinGW的\ MSYS\1.0\BIN

    无论你做什么,确保"哪个perl"显示了草莓Perl之前的路径.

    5)还在我的msys\1.0\bin目录中重命名为"link.exe":C:\ MinGW\msys\1.0\bin以便它未被使用.(即将其重命名为"link_UNUSED.exe")

    我相信这是因为,在上面的步骤1中,您的"vcvarsall.bat"将所有内容设置为使用Microsoft C的编译器/链接器,但是在步骤2中,链接器已更改为使用Msys代替.您需要使用Microsoft.

    要验证重命名为"link_UNUSED.exe"成功,请键入:哪个链接并确保它指向您的Visual Studio 10链接,而不是msys附带的link.exe.

    6)首先"cd nginx"然后在nginx文件夹中创建一个objs/lib文件夹树.如指南中所述,在此处解压/解压缩pcre,zlib和openssl .

    7)当你的当前目录仍然是nginx时,运行nginx的autoconfigure脚本,但首先修改下面的命令,改变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项目时使用的生成的.c和.h文件,并且相信我,您不希望以后在意识到需要不同选项时重做.

    7)做到.

    nmake -f objs/Makefile

    如果成功,您刚刚编译的nginx.exe应该在您的home\YourUsername \nginx\objs文件夹中.即:C:\ MinGW\msys\1.0\home\JensenV \nginx\_ objs

    此外,这些文件现在与nginx.exe位于同一文件夹中:ngx_auto_config.h ngx_auto_headers.h ngx_modules.c ngx_pch.c

    您将在创建Visual Studio项目时使用它们.

    8)喝啤酒.

    **

    第二部分:创建Visual Studio nginx项目

    **

    为命令行应用程序创建一个空的Visual Studio项目.将项目保存在nginx文件夹(根级别)中.请注意,在此步骤之前,您可以将msys文件夹移到msys之外的任何位置.

    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++概述:将"将警告视为错误"设置为否(WX-)预处理器:添加这些预处理器定义: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文件中,如果您添加了任何源代码(在此步骤之前添加了您想要的任何文件,那么您可以看到我在说什么),您将看到如下内容:

    创建一个只包含makefile中的.obj文件的新文档.在文本编辑器中使用"搜索和替换"来修改它们以匹配Visual Studio项目文件的格式(因此以.c />而不是.obj \结尾,并以

    另外不要忘记将正斜杠更改为反斜杠.不要包含zlib.lib或pcre.lib行.我忘了你是否应该包括nginx.res.(可能不是.)

    一旦确定格式正确,请保存Visual Studio项目并尝试打开它.如果makefile中的所有文件都显示在项目中,则表明您已正确完成.

    5)还记得构建exe时nginx创建的那些特殊的.c和.h文件吗?您现在也想将它们添加到项目中.添加这些家伙:

    ngx_modules.c ngx_pch.c

    6)现在你已经准备好编译了!

    老实说我可能已经遗忘了一些东西,所以你可能仍然有一些链接器或编译错误来修复,但这应该给你一个良好的开端!

    注意:如果要更改nginx中包含的选项,则必须在上面的第I部分中执行新的自动/配置,新的nmake,然后在Visual Studio项目中包含其他源代码,并使用新的在Visual Studio项目中生成ngx_modules.c和ngx_pch.c文件.

    2023-01-30 09:48 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有