Windows 11 下使用 MSVC 2022 编译64位Nginx

2024-09-04 21:28

本文主要是介绍Windows 11 下使用 MSVC 2022 编译64位Nginx,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


一、软件准备


1、安装 Visual Studio 2022

包含单个组件:

  • .NET Framework 4.6.1 目标包
  • .NET Framework 4.6.1 SDK
  • Windows 通用 C 运行时
  • Windows 通用 CRT SDK
  • MSVC v142 - VS 2019 C++ x64/x86 生成工具(v14.26)
  • 对 v142 生成工具(14.21)的 C++/CLI 支持
  • Clang compile for Windows
  • Windows 10 SDK (10.0.16299.0)

Visual Studio 2022 的安装这里就不再详细说明。


2、下载源码

下载地址


请选择一个带有 RELEASE TAG 的版本进行下载,如下图:

截至目前, Nginx 的最新 release 版本为 1.26.2

在这里插入图片描述


在左侧选择压缩包类型,点击下载即可,这里我选择ZIP


在这里插入图片描述


下载完成获得源码文件,解压后如下:


在这里插入图片描述


3、下载 pcre 源码包,解压至 objs/lib 文件夹

在这里插入图片描述


4、下载 zlib 源码包,解压至 objs/lib 文件夹

在这里插入图片描述


5、下载 openssl 的源码包,解压至 objs/lib 文件夹

在这里插入图片描述


6、下载并安装 StrawberryPerl

因为需要编译 OpenSSL, 需要使用 perl 进行配置

https://strawberryperl.com/


在这里插入图片描述


安装,同意协议,直接next
在这里插入图片描述


在这里插入图片描述


7、下载并安装 MSYS 2

msys2 在编译阶段用作配置 Makefile

下载地址:https://www.msys2.org/


在这里插入图片描述


安装,直接next ,直到安装完成

在这里插入图片描述


![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/98d8ca9df81f435593ab66eb92e60033.png#pic_center)

二、编译配置


1、修改 /nginx/auto/cc/msvc 文件

MSVC 2022 对应 19.34,在 echo " + cl version: $NGX_MSVC_VER" 的上一行加上 :NGX_MSVC_VER=19.34


在这里插入图片描述


在这里插入图片描述


2、64位编译修改(32位编译忽略)

  • Step 1: 打开.\auto\lib\openssl\makefile.msvc文件

在这里插入图片描述


  • Step 2: 找到以下代码进行替换

    • perl Configure $(OPENSSL_TARGET) no-shared no-threads替换为perl Configure VC-WIN64A no-shared

在这里插入图片描述


  • Step 3 找到以下代码进行替换

  • if exist ms\do_ms.bat 替换为if exist ms\do_win64a.bat

  • ms\do_ms替换为ms\do_win64a

在这里插入图片描述


3、配置 Makefile
  • Step 1: 使用 msys2 的任意环境进入 nginx 源码目录
cd D:\Nginx

在这里插入图片描述


  • Step 2: 执行以下命令,用于生成适用于 MSVC 的 Makefile

以下命令行配置了 nginx 在 Windows 下的常用模块的编译,可以根据自己需要调整相关模块:

auto/configure \--with-cc=cl \--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.45 \--with-zlib=objs/lib/zlib-1.3.1 \--with-openssl=objs/lib/openssl-3.3.1 \--with-openssl-opt='no-asm no-tests -D_WIN32_WINNT=0x0601' \--with-http_ssl_module \--with-http_v2_module \--with-http_realip_module \--with-http_addition_module \--with-http_sub_module \--with-http_stub_status_module \--with-http_dav_module \--with-http_flv_module \--with-http_mp4_module \--with-http_gunzip_module \--with-http_gzip_static_module \--with-http_auth_request_module \--with-http_random_index_module \--with-http_secure_link_module \--with-http_slice_module \--with-mail \--with-mail_ssl_module \--with-stream \--with-stream_ssl_module \--with-stream_ssl_preread_module

执行成功,会出现以下界面:


在这里插入图片描述


  • Step 3: 打开VS对应的 X64 Native Tools Command … for VS 2022

在这里插入图片描述


在这里插入图片描述


![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7fc82884e1dc4a3b9b1386125f61ba79.png#pic_center)

Step 4: 切换到Nginx根目录 执行编译命令


cd /d D:\Nginx
nmake -f objs/Makefile

如下图:
在这里插入图片描述


等待编译完成,会在 nginx/objs/ 文件夹内出现 nginx.exe,如下图所示:
在这里插入图片描述


nginx.exe运行依赖同级目录下存在conf、html、logs、temp目录及配置文件,否则无法启动。


这篇关于Windows 11 下使用 MSVC 2022 编译64位Nginx的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137069

相关文章

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

MySQL 强制使用特定索引的操作

《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用