我正试图用RTMP模块为Windows编译NGINX,但我一直遇到错误。我一直遵循的指南是http://nginx.org/en/docs/howto_build_on_win32.html
我安装了以下软件:
- MSYS2
- Strawberry Perl(64位(
- Visual Studio 2022(社区版(+使用C++工作负载的桌面开发
安装MSYS2后,我遵循了中的安装后说明
pacman -Syu
pacman -Su
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
我已经为PATH 设置了以下系统环境变量
C:Strawberrycbin
C:Strawberryperlsitebin
C:Strawberryperlbin
C:msys64mingw64bin
我已经将NGINX源代码下载到"C:"驱动器上一个名为"NGINX"的目录中。在这个目录中,我下载并提取了以下包到目录"objs/lib"中。
- zlib-1.2.11
- 百分比2-10.39
- 开口-1.1m
- nginx-rmp-模块-1.2.2
这将创建以下目录结构
nginx
objs
lib
zlib-1.2.11
pcre2-10.39
openssl-1.1.1m
nginx-rtmp-module-1.2.2
我已经通过从Visual C目录运行"vcvarsall.bat"脚本设置了Visual C环境
PS C:Program FilesMicrosoft Visual Studio2022CommunityVCAuxiliaryBuild> .vcvarsall.bat amd64
**********************************************************************
** Visual Studio 2022 Developer Command Prompt v17.0.5
** Copyright (c) 2021 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
在其他一些指南中,他们指示修改"auto\lib\openssl"中的"makefile.msvc"文件原始文件
# Copyright (C) Igor Sysoev
# Copyright (C) Nginx, Inc.
all:
cd $(OPENSSL)
perl Configure VC-WIN32 no-shared
--prefix="%cd%/openssl"
--openssldir="%cd%/openssl/ssl"
$(OPENSSL_OPT)
if exist msdo_ms.bat (
msdo_ms
&& $(MAKE) -f msnt.mak
&& $(MAKE) -f msnt.mak install
) else (
$(MAKE)
&& $(MAKE) install_sw
)
修改的文件
# Copyright (C) Igor Sysoev
# Copyright (C) Nginx, Inc.
all:
cd $(OPENSSL)
perl Configure VC-WIN64A no-shared
--prefix="%cd%/openssl"
--openssldir="%cd%/openssl/ssl"
$(OPENSSL_OPT)
if exist msdo_win64a.bat (
msdo_ms
&& $(MAKE) -f msnt.mak
&& $(MAKE) -f msnt.mak install
) else (
$(MAKE)
&& $(MAKE) install_sw
)
使用MSYS2 MinGW x64我已经运行了配置脚本
auto/configure
--with-cc=cl
--with-debug
--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
--http-scgi-temp-path=temp/scgi_temp
--http-uwsgi-temp-path=temp/uwsgi_temp
--with-cc-opt=-DFD_SETSIZE=1024
--with-pcre=objs/lib/pcre2-10.39
--with-zlib=objs/lib/zlib-1.2.11
--with-openssl=objs/lib/openssl-1.1.1m
--with-openssl-opt=no-asm
--with-http_ssl_module
--add-module=objs/lib/nginx-rtmp-module-1.2.2
--with-http_flv_module
--with-http_gzip_static_module
--with-http_mp4_module
--with-http_v2_module
--with-stream
--with-stream_ssl_module
--with-http_dav_module
--with-http_realip_module
--with-http_auth_request_module
--with-http_stub_status_module
checking for OS
+ MINGW64_NT-10.0-19044 3.3.3-341.x86_64 x86_64
+ using Microsoft Visual C++ compiler
+ cl version: 19.30
checking for MINGW64_NT-10.0-19044 specific features
configuring additional modules
adding module in objs/lib/nginx-rtmp-module-1.2.2
+ ngx_rtmp_module was configured
creating objs/Makefile
Configuration summary
+ using PCRE2 library: objs/lib/pcre2-10.39
+ using OpenSSL library: objs/lib/openssl-1.1.1m
+ using zlib library: objs/lib/zlib-1.2.11
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"
最后,为了构建NGINX,我在"x64 Native Tools命令提示符for VS 2022"中运行了"nmake"命令,这给了我错误
C:nginx>nmake
Microsoft (R) Program Maintenance Utility Version 14.30.30709.0
Copyright (C) Microsoft Corporation. All rights reserved.
"C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.30.30705binHostX64x64nmake.exe" -f objs/Makefile
Microsoft (R) Program Maintenance Utility Version 14.30.30709.0
Copyright (C) Microsoft Corporation. All rights reserved.
"C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.30.30705binHostX64x64nmake.exe" -f auto/lib/openssl/makefile.msvc OPENSSL="objs/lib/openssl-1.1.1m" OPENSSL_OPT="no-asm"
Microsoft (R) Program Maintenance Utility Version 14.30.30709.0
Copyright (C) Microsoft Corporation. All rights reserved.
cd objs/lib/openssl-1.1.1m
perl Configure VC-WIN64A no-shared --prefix="%cd%/openssl" --openssldir="%cd%/openssl/ssl" no-asm
Configuring OpenSSL version 1.1.1m (0x101010dfL) for VC-WIN64A
Using os-specific seed configuration
Creating configdata.pm
Creating makefile
**********************************************************************
*** ***
*** OpenSSL has been successfully configured ***
*** ***
*** If you encounter a problem while building, please open an ***
*** issue on GitHub <https://github.com/openssl/openssl/issues> ***
*** and include the output from the following command: ***
*** ***
*** perl configdata.pm --dump ***
*** ***
*** (If you are new to OpenSSL, you might want to consult the ***
*** 'Troubleshooting' section in the INSTALL file first) ***
*** ***
**********************************************************************
if exist msdo_win64a.bat ( msdo_ms
&& "C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.30.30705binHostX64x64nmake.exe" -f msnt.mak && "C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.30.30705binHostX64x64nmake.exe" -f msnt.mak install ) else (
"C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.30.30705binHostX64x64nmake.exe" && "C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.30.30705binHostX64x64nmake.exe" install_sw )
Microsoft (R) Program Maintenance Utility Version 14.30.30709.0
Copyright (C) Microsoft Corporation. All rights reserved.
"C:Strawberryperlbinperl.exe" "-I." -Mconfigdata "utildofile.pl" "-omakefile" "includecryptobn_conf.h.in" > includecryptobn_conf.h
"C:Strawberryperlbinperl.exe" "-I." -Mconfigdata "utildofile.pl" "-omakefile" "includecryptodso_conf.h.in" > includecryptodso_conf.h
"C:Strawberryperlbinperl.exe" "-I." -Mconfigdata "utildofile.pl" "-omakefile" "includeopensslopensslconf.h.in" > includeopensslopensslconf.h
"C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.30.30705binHostX64x64nmake.exe" / depend && "C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.30.30705binHostX64x64nmake.exe" / _all
Microsoft (R) Program Maintenance Utility Version 14.30.30709.0
Copyright (C) Microsoft Corporation. All rights reserved.
Microsoft (R) Program Maintenance Utility Version 14.30.30709.0
Copyright (C) Microsoft Corporation. All rights reserved.
"C:Strawberryperlbinperl.exe" "utilmkbuildinf.pl" "cl /Zi /Fdossl_static.pdb /MT /Zl /Gs0 /GF /Gy /W3 /wd4090 /nologo /O2 -D"L_ENDIAN" -D"OPENSSL_PIC"" "VC-WIN64A" > cryptobuildinf.h
cl /Zi /Fdossl_static.pdb /MT /Zl /Gs0 /GF /Gy /W3 /wd4090 /nologo /O2 /I "." /I "include" /I "crypto" -D"L_ENDIAN" -D"OPENSSL_PIC" -D"OPENSSLDIR="C:\nginx\objs\lib\openssl-1.1.1m\openssl\ssl"" -D"ENGINESDIR="C:\nginx\objs\lib\openssl-1.1.1m\openssl\lib\engines-1_1"" -D"OPENSSL_SYS_WIN32" -D"WIN32_LEAN_AND_MEAN" -D"UNICODE" -D"_UNICODE" -D"_CRT_SECURE_NO_DEPRECATE" -D"_WINSOCK_DEPRECATED_NO_WARNINGS" -D"NDEBUG" -c /Focryptocversion.obj "cryptocversion.c"
cversion.c
cl /Zi /Fdossl_static.pdb /MT /Zl /Gs0 /GF /Gy /W3 /wd4090 /nologo /O2 /I "." /I "include" /I "crypto" -D"L_ENDIAN" -D"OPENSSL_PIC" -D"OPENSSLDIR="C:\nginx\objs\lib\openssl-1.1.1m\openssl\ssl"" -D"ENGINESDIR="C:\nginx\objs\lib\openssl-1.1.1m\openssl\lib\engines-1_1"" -D"OPENSSL_SYS_WIN32" -D"WIN32_LEAN_AND_MEAN" -D"UNICODE" -D"_UNICODE" -D"_CRT_SECURE_NO_DEPRECATE" -D"_WINSOCK_DEPRECATED_NO_WARNINGS" -D"NDEBUG" /Zs /showIncludes "cryptocversion.c" 2>&1 > cryptocversion.d
lib /nologo /out:libcrypto.lib @C:UsersWillAppDataLocalTempnm8B87.tmp
cryptocversion.obj : fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'x86'
NMAKE : fatal error U1077: '"C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.30.30705binHostX64x64lib.EXE"' : return code '0x458'
Stop.
NMAKE : fatal error U1077: '"C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.30.30705binHostX64x64nmake.exe"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'if' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.30.30705binHostX64x64nmake.exe"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.30.30705binHostX64x64nmake.exe"' : return code '0x2'
Stop.
我哪里错了?
我正在尝试做同样的事情。我设法进一步构建,但仍然遇到了OpenSSL不是从NGINX Makefile构建的问题,但确实使用nmake为x64单独构建了OpenSSL。以下是我的步骤:
1.我从他们的Git repos中查看了以下三个存储库:
(starting at the nginx base folder)
mkdir objs
cd objs
mkdir lib
cd lib
git clone git clone https://github.com/openssl/openssl.git
(renamed base folder to 'openssl')
git clone https://github.com/PCRE2Project/pcre2.git
(generates pcre2-10.40 folder)
git clone https://github.com/madler/zlib.git
(generates zip-1.2.13 folder)
2.更改到openssl文件夹并设置环境变量以进行输出,如基本文件夹中NOTES-WINDOWS.md文件中所述:
set PREFIX=C:Program FilesOpenSSL
set OPENSSLDIR=C:Program FilesCommon FilesSSL
set Platform=x64
set INCLUDE="C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.34.31933include;C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.34.31933ATLMFCinclude;C:Program FilesMicrosoft Visual Studio2022CommunityVCAuxiliaryVSinclude;C:Program Files (x86)Windows Kits10include10.0.22621.0ucrt;C:Program Files (x86)Windows Kits10include10.0.22621.0um;C:Program Files (x86)Windows Kits10include10.0.22621.0shared;C:Program Files (x86)Windows Kits10include10.0.22621.0winrt;C:Program Files (x86)Windows Kits10include10.0.22621.0cppwinrt;
set LIB=C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.34.31933ATLMFClibx64;C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.34.31933libx64;C:Program Files (x86)Windows KitsNETFXSDK4.8libumx64;C:Program Files (x86)Windows Kits10lib10.0.22621.0ucrtx64;C:Program Files (x86)Windows Kits10lib10.0.22621.0umx64
set LIBPATH=C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.34.31933ATLMFClibx64;C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.34.31933libx64;C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.34.31933libx86storereferences;C:Program Files (x86)Windows Kits10UnionMetadata10.0.22621.0;C:Program Files (x86)Windows Kits10References10.0.22621.0;C:WindowsMicrosoft.NETFramework64v4.0.30319
set PATH=C:/Strawberry/perl/bin;C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.34.31933binHostX64x64;C:Program FilesMicrosoft Visual Studio2022CommunityCommon7IDEVCVCPackages;C:Program FilesMicrosoft Visual Studio2022CommunityCommon7IDECommonExtensionsMicrosoftTestWindow;C:Program FilesMicrosoft Visual Studio2022CommunityCommon7IDECommonExtensionsMicrosoftTeamFoundationTeam Explorer;C:Program FilesMicrosoft Visual Studio2022CommunityMSBuildCurrentbinRoslyn;C:Program FilesMicrosoft Visual Studio2022CommunityTeam ToolsPerformance Toolsx64;C:Program FilesMicrosoft Visual Studio2022CommunityTeam ToolsPerformance Tools;C:Program Files (x86)Microsoft SDKsWindowsv10.0AbinNETFX 4.8 Toolsx64;C:Program Files (x86)HTML Help Workshop;C:Program Files (x86)Windows Kits10bin10.0.22621.0x64;C:Program Files (x86)Windows Kits10binx64;C:Program FilesMicrosoft Visual Studio2022CommunityMSBuildCurrentBinamd64;C:WindowsMicrosoft.NETFramework64v4.0.30319;C:Program FilesMicrosoft Visual Studio2022CommunityCommon7IDE;C:Program FilesMicrosoft Visual Studio2022CommunityCommon7Tools;
3.运行perl-Configure命令
> perl Configure VC-WIN64A no-asm
Configuring OpenSSL version 3.1.0-beta1-dev for target VC-WIN64A
Using os-specific seed configuration
Created configdata.pm
Running configdata.pm
Created makefile.in
Created makefile
**********************************************************************
*** ***
*** OpenSSL has been successfully configured ***
*** ***
*** If you encounter a problem while building, please open an ***
*** issue on GitHub <https://github.com/openssl/openssl/issues> ***
*** and include the output from the following command: ***
*** ***
*** perl configdata.pm --dump ***
*** ***
*** (If you are new to OpenSSL, you might want to consult the ***
*** 'Troubleshooting' section in the INSTALL.md file first) ***
*** ***
**********************************************************************
4.运行nmake
(after 20 minutes of compiling)
...
cmd /C ""cl" /Zs /showIncludes /Zi /Fdapp.pdb /Gs0 /GF /Gy /MD /W3 /wd4090 /nologo /O2 -I"apps" -I"." -I"include" -I"appsinclude" -D"OPENSSL_BUILDING_OPENSSL" -D"OPENSSL_SYS_WIN32" -D"WIN32_LEAN_AND_MEAN" -D"UNICODE" -D"_UNICODE" -D"_CRT_SECURE_NO_DEPRECATE" -D"_WINSOCK_DEPRECATED_NO_WARNINGS" -D"NDEBUG" "appsx509.c" > appsopenssl-bin-x509.d 2>&1"
IF EXIST appsopenssl.exe.manifest DEL /F /Q appsopenssl.exe.manifest
"link" /nologo /debug setargv.obj /subsystem:console /opt:ref /nologo /debug @C:msys64tmpnm1758.tmp
正在创建库应用程序\openssl.lib和对象应用程序\openssl.expIF EXIST apps\openssl.exe.manifest"mt"-nologo-manifest apps\openssl.exe.manifest-outputsource:apps\openssl.exe
5.创建目标文件夹并授予自己对它们的完全控制权
C:Program FilesOpenSSL
C:Program FilesCommon FilesSSL
6.将OpenSSL二进制文件和SSL公共库安装到目标文件夹
> nmake install
*** Installing runtime programs
Copying: apps//openssl.exe to C:/Program Files/OpenSSL/bin/openssl.exe
Copying: apps//openssl.pdb to C:/Program Files/OpenSSL/bin/openssl.pdb
Copying: tools//c_rehash.pl to C:/Program Files/OpenSSL/bin/c_rehash.pl
created directory `C:/Program Files/Common Files/SSL/certs'
created directory `C:/Program Files/Common Files/SSL/private'
created directory `C:/Program Files/Common Files/SSL/misc'
Copying: ./apps/openssl.cnf to C:/Program Files/Common Files/SSL/openssl.cnf.dist
Copying: ./apps/openssl.cnf to C:/Program Files/Common Files/SSL/openssl.cnf
Copying: apps//CA.pl to C:/Program Files/Common Files/SSL/misc/CA.pl
Copying: apps//tsget.pl to C:/Program Files/Common Files/SSL/misc/tsget.pl
Copying: ./apps/ct_log_list.cnf to C:/Program Files/Common Files/SSL/ct_log_list.cnf.dist
Copying: ./apps/ct_log_list.cnf to C:/Program Files/Common Files/SSL/ct_log_list.cnf
...
Copying: ./doc/html/man7/proxy-certificates.html to C:/Program Files/OpenSSL/html/man7/proxy-certificates.html
Copying: ./doc/html/man7/RAND.html to C:/Program Files/OpenSSL/html/man7/RAND.html
Copying: ./doc/html/man7/RSA-PSS.html to C:/Program Files/OpenSSL/html/man7/RSA-PSS.html
Copying: ./doc/html/man7/ssl.html to C:/Program Files/OpenSSL/html/man7/ssl.html
Copying: ./doc/html/man7/X25519.html to C:/Program Files/OpenSSL/html/man7/X25519.html
Copying: ./doc/html/man7/x509.html to C:/Program Files/OpenSSL/html/man7/x509.html
(我稍后将对此进行编辑,以添加到目前为止NGINX构建的其余部分…(