gpt4 book ai didi

visual-studio - 使用Visual Studio编译NGINX

转载 作者:行者123 更新时间:2023-12-04 16:34:20 24 4
gpt4 key购买 nike

关于NGINX,我有两个问题:

  • 是否有人已经使用Visual Studio编译了NGINX?我想创建一个用于编译NGINX的VS9项目。
  • 这是我真正的需求,有什么办法可以将NGINX编译为Lib或DLL?
  • 最佳答案

    我刚刚为nginx构建了一个Visual Studio 2010项目。这个过程并非一帆风顺,因此我将尝试详细介绍我学到的一切。这是一个数小时到数天的过程,具体取决于您的经验。

    步骤1:您必须首先遵循Guide for building nginx on windows。这不仅可以构建nginx,还可以创建在创建Visual Studio项目时将使用的.c和.h文件。没有这些文件将无法正常工作。 (有关更多信息,请参见here。)

    如果像我这样对Unix的经验较少,上面的指南会留下一些 Unresolved 问题。因此,我将先以自己的技巧充实该指南,然后再向您介绍有关为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

    如果成功,您应该会看到类似绿色的内容:
    詹森V @ AVWMA047LB〜
    (除了您的username @ networkaddress之外)在一个类似于MINGW32的窗口中:〜

    您可能想知道您的“主文件夹”在哪里。它在msys\1.0\home下。因此,在我的系统上,它在这里:
    C:\MinGW\msys\1.0\home\JensenV

    如果您执行“ls”或“dir”,则这是您最初所在的目录。

    3)假设您已按照上述说明安装了Mercurial,现在应该可以 check out ngynx源:
    hg克隆 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”显示通向Strawberry 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文件夹树。如 guide所述,在此处解压缩/压缩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

    如果您想 change any configuration options,现在是时候了。这些选项会影响生成的.c和.h文件,您稍后将在创建Visual Studio项目时使用这些文件,请相信我,当您意识到需要其他选项时,您不必稍后重做。

    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文件夹(根级别)中。请注意,在执行此步骤之前,您可以将nginx文件夹移动到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中包括的 options,则必须在上面的第I部分中进行新的自动/配置,新的nmake,然后在Visual Studio项目中包括其他源代码,并使用新的在Visual Studio项目中生成的ngx_modules.c和ngx_pch.c文件。

    关于visual-studio - 使用Visual Studio编译NGINX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21486482/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com