首页 > 系统相关 >windows下nginx-rtmp-module的编译方法

windows下nginx-rtmp-module的编译方法

时间:2024-03-29 18:59:48浏览次数:32  
标签:http temp windows module nginx path --

Foreword

Linux为当前nginx 添加rtmp 模块非常的方便,sudo ./configure --add-module + sudo make就完事儿了,但是windows比较复杂,没有包管理器,所以各个模块的源码要自己找,下面是我在windows11下的nginx with rtmp module的编译记录。

编译器工具链大概有msvc toolchain, perl

以下是我操作系统的具体信息:

OS: Windows 11 Pro x86_64
Kernel: 10.0.22621
CPU: Intel Ultra 7 155H (22) @ 3.000GHz

Prerequisite

首先下载Nginx的源码,可以使用git也可以使用Mercurial不过因为后续要借用git bash生成makefile所以下面统一使用git。在写这篇博客时,nginxmainline1.25.4,所以下面编译我也用1.25.4的版本。

首先在自定义目录(自己想把源码放哪儿就在哪儿打开)打开git-bash
输入下列指令clone nginx仓库

git clone https://github.com/nginx/nginx.git
cd nginx
git checkout release-1.25.4

clone 完成后,要查看一下当前版本所需依赖的版本,输入下列命令查看

cat -n misc/GNUmakefile

我的控制台输出如下,大概可以看到openssl的版本是3.0.13zlib的版本是1.3.1pcre2的版本是10.39

     8  OBJS =          objs.msvc8
     9  OPENSSL =       openssl-3.0.13
    10  ZLIB =          zlib-1.3.1
    11  PCRE =          pcre2-10.39

以下我下载指定版本的依赖源码使用的是git clone,当然也可以通过下载压缩包然后解压的方式,这里我给出两种方法所需要的操作步骤

mkdir objs
mkdir objs/lib
cd objs/lib
git clone https://github.com/openssl/openssl.git
git clone https://github.com/madler/zlib.git
git clone https://github.com/pcre2project/pcre2.git
cd openssl
git checkout openssl-3.0.13
cd ../zlib/
git checkout v1.3.1
cd ../pcre2/
git checkout pcre2-10.39

然后接着下载rtmp module的源码

git clone https://github.com/arut/nginx-rtmp-module.git
git checkout v1.2.2
cd ../../..

Main

源码部分的准备已经完成,下面正式开始编译部分,我们重新回到源代码主目录,运行configuration script,脚本的具体配置可以参考nginx官网

但如果想要更完整的nginx,即仅仅只是在发行版上增加rtmp module,最好的办法是先看看发行版的编译参数

下载1.25.4版本,并输入nginx -V,可以看到以下参数

./nginx -V
nginx version: nginx/1.25.4
built by cl 16.00.30319.01 for 80x86
built with OpenSSL 3.0.13 30 Jan 2024
TLS SNI support enabled
configure arguments: --with-cc=cl --builddir=objs.msvc8 --with-debug --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.msvc8/lib/pcre2-10.39 --with-zlib=objs.msvc8/lib/zlib-1.3.1 --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_stub_status_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-stream --with-stream_realip_module --with-stream_ssl_preread_module --with-openssl=objs.msvc8/lib/openssl-3.0.13 --with-openssl-opt='no-asm no-tests -D_WIN32_WINNT=0x0501' --with-http_ssl_module --with-mail_ssl_module --with-stream_ssl_module

我们根据我们现有的库的位置,修改脚本参数

auto/configure \
        --with-cc=cl \
        --builddir=objs.msvc8 \
        --with-debug \
        --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-http_v2_module \
        --with-http_realip_module \
        --with-http_addition_module \
        --with-http_sub_module \
        --with-http_dav_module \
        --with-http_stub_status_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-stream \
        --with-stream_realip_module \
        --with-stream_ssl_preread_module \
        --with-http_ssl_module \
        --with-mail_ssl_module \
        --with-stream_ssl_module \
        --with-openssl=objs/lib/openssl \
        --with-openssl-opt='no-asm no-tests -D_WIN32_WINNT=0x0501' \
        --with-pcre=objs/lib/pcre2 \
        --with-zlib=objs/lib/zlib \
        --add-module=objs/lib/nginx-rtmp-module

运行后,得到如下输出,代表着makefile已经生成完毕
auto/configure

Configuration summary
  + using PCRE2 library: objs/lib/pcre2
  + using OpenSSL library: objs/lib/openssl
  + using zlib library: objs/lib/zlib

  nginx 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"

生成后,手动修改makefile,使得msvc编译器不将warnings视为错误,因为我在编译rtmp-module的时候报了warnings导致编译失败。同时添加-MP选项使得msvc支持多进程编译,加快编译速度。

输入以下指令,编辑Makefile,Makefile的具体地址请以上面的auto\configure 脚本生成的地址为准,不同环境生成地址可能不同。

vim ./objs.msvc8/Makefile

找到CFLAGS参数,删除-WX, 并添加-MP,然后保存。
以下是我修改后的参数:

CFLAGS = -MP  -O2  -W4  -nologo -MT -Zi -Fdobjs.msvc8/nginx.pdb -DFD_SETSIZE=1024 -DNO_SYS_TYPES_H

接下来打开Visual Studio 2022 Developer Command PromptVisual Studio 版本不同,命令行名字可能也不同

切换到源码目录,运行nmake,等待一段时间,出现下列输出,即表示编译成功。
nginx build completion

Finished searching libraries
        sed -e "s|%PREFIX%||"  -e "s|%PID_PATH%|/logs/nginx.pid|"  -e "s|%CONF_PATH%|/conf/nginx.conf|"  -e "s|%ERROR_LOG_PATH%|/logs/error.log|"  < docs/man/nginx.8 > objs.msvc8/nginx.8

切换到objs.msvc8目录运行./nginx -V,在configure arguments:的输出中如果能看到--add-module=objs/lib/nginx-rtmp-module,表示nginx已成果添加rtmp-module

End

其他nginx-module的编译方式类同。以上仅供参考,build toolchain版本的不同,上述编译步骤都可能略有不同,具体请根据自身开发环境进行调整。

Reference

Tags · openssl/openssl (github.com)

Tags · PCRE2Project/pcre2 (github.com)
Tags · madler/zlib (github.com)

Building nginx on the Win32 platform with Visual C
Building nginx from Sources (nginx.org)

/MP(使用多个进程生成) | Microsoft Learn

原文标题: windows下nginx-rtmp-module的编译方法
原文作者: Styunlen
原文地址: https://styunlen.cn/archives/post-1662.html

标签:http,temp,windows,module,nginx,path,--
From: https://blog.csdn.net/qq_32059125/article/details/137153469

相关文章

  • ktpass命令是Windows Server上的一个命令行工具,用于创建和管理Kerberos密钥表(Keytab)
    ktpass命令是WindowsServer上的一个命令行工具,用于创建和管理Kerberos密钥表(Keytab)。它允许管理员将用户帐户或服务帐户的凭据导出到一个可由其他系统使用的文件中,以便进行身份验证和授权。这个工具通常用于在Windows和Unix/Linux系统之间建立单点登录(SSO)的集成。通过ktpass命......
  • getmac 是一个 Windows 系统命令,用于显示指定计算机上的网络适配器的物理地址(MAC 地址
    getmac是一个Windows系统命令,用于显示指定计算机上的网络适配器的物理地址(MAC地址)。MAC地址是唯一标识网络设备的地址,通常由6组十六进制数字组成,用于在局域网中唯一标识网络设备。使用getmac命令可以查看计算机上每个网络适配器的MAC地址,这对于网络管理员来说是一个很......
  • vuex.esm.js:135 Uncaught Error: [vuex] getters should be function but “getters.
    报错vuex.esm.js:135UncaughtError:[vuex]gettersshouldbefunctionbut"getters.mode"inmodule"userModule"is"dark".atassert(vuex.esm.js:135:1)原因:在使用vuex的moulds时index.js中已创建了一个vue实例newVuex.Store,在模块文件中又再创建了一个,导致报......
  • 深入理解nginx mp4流媒体模块[下]
    深入理解nginxmp4流媒体模块[上]深入理解nginxmp4流媒体模块[中]  以下对各个mp4的加载过程依次进行分析。1.加载ftypatom  加载ftypatom的逻辑由ngx_http_mp4_read_ftyp_atom函数来完成,其最主要的逻辑就是将文件中读取到的ftypatom放到ngx_http_mp4_file_t上......
  • Windows安装CUDA 12.1及cudnn
    下载CUDA打开链接(https://developer.nvidia.com/cuda-toolkit-archive)选择 12.1.1 版本 选择Windows->x86_64->10->exe(local)->Download  下载完成后按提示安装到默认路径 下载cudnn点击进入nVidia下载cudnn(https://developer.download.nvidia.com/co......
  • Windows 安装 Podman Desktop
    简介: Podman(PODMANager)是一个用于管理容器和映像、挂载到这些容器中的卷以及由容器组组成的pod的工具。Podman在Linux上运行容器,但也可以使用Podman管理的虚拟机在Mac和Windows系统上使用。Podman基于libpod,libpod是一个用于容器生命周期管理的库,也包含在此存储......
  • Windows注册表的基本概念
    1关于注册表注册表是Windows系统中重要的数据配置存储结构,存储着系统绝大部分的核心配置信息。实际上也是一种文件,这些文件大多数存储在系统盘system32\config目录下,如笔者系统安装在C盘,那这个目录就是C:\Windows\System32\config。Hive方式在该文件夹下可以看到SOFTWARE、S......
  • 自己写个网盘系列:③ 开源这个网盘编码,手把手教你windows linux 直接部署,docker本地打
    ❤系列①②已经完成了这个项目的页面和项目的全部编码,前后端分离,这个文章将向你展示运维小伙伴如何部署到windows服务器,linux服务器,docker部署,一学就会,快来看看吧!❤说明:这个系列准备用Simple快速框架搞个自己能用的网盘,来个实战,教大家如何搞一个项目,其中你能学到如何进行项目......
  • Windows7的C盘瘦身计划
    C盘总是容易满了,于是打算瘦身。参考文章:C盘清理——“C:\ProgramData\PackageCache“文件夹转移:https://blog.csdn.net/qq_40206657/article/details/130917738首先是复制,用管理员运行cmd,输入:xcopy/e"C:\ProgramData\PackageCache""F:\ProgramData\PackageCache"大约一......
  • windows权限维持
    一、权限维持a、粘滞键后门介绍:windows系统下连续按5次shift可调出其程序,但使用可能有一部分人不太了解,毕竟这个功能一般我们都用不到,粘滞键是为了那些按钮有困难的人设计的,也可理解为残疾,就是按键困难,一次只能按一个键的这种需求,那么如果用ctrl+c,ctrl+v这种快捷键或者......