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使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa