编译环境: win10 vs2022 cmake4.2.1
编译方式静态:MT lib
cmake4.2.1 静态编译参数是:
bash
-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded^
更多参考:
CMAKE_MSVC_RUNTIME_LIBRARY --- CMake 4.2.1 Documentation

1、curl-8.17.0
2、openssl-1.1.1h
NASM perl5.32.1.exe
3、zlib-1.3.1

4、脚本build_all.bat
bash
@echo off
cls
chcp 65001 >nul
echo ======================================================
echo OpenSSL+zlib+cURL 静态MT版本编译脚本
echo x64 静态库 MT运行时 无依赖
echo ======================================================
echo.
:: ===================== 配置区(根据实际情况修改)=====================
set "OPENSSL_SRC=E:\test\openssl-1.1.1h"
set "OPENSSL_INSTALL=E:\test\openssl-1.1.1h-install"
set "ZLIB_SRC=E:\test\zlib-1.3.1"
set "ZLIB_INSTALL=E:\test\zlib-1.3.1-static"
set "CURL_SRC=E:\test\curl-8.17.0"
set "CURL_INSTALL=E:\test\curl-8.17.0-static"
set "CMAKE_PATH=C:\Program Files\CMake3.18.4\bin\cmake.exe"
set "VS_GENERATOR=Visual Studio 17 2022"
set "PLATFORM=x64"
:: ====================================================================
:: 检查工具与源码路径有效性
if not exist "%CMAKE_PATH%" (
echo 错误:未找到 CMake,请检查路径是否正确
pause
exit /b 1
)
if not exist "%OPENSSL_SRC%\Configure" (
echo 错误:未找到 OpenSSL 源码,请检查路径是否正确
pause
exit /b 1
)
if not exist "%ZLIB_SRC%\CMakeLists.txt" (
echo 错误:未找到 zlib 源码,请检查路径是否正确
pause
exit /b 1
)
if not exist "%CURL_SRC%\CMakeLists.txt" (
echo 错误:未找到 cURL 源码,请检查路径是否正确
pause
exit /b 1
)
:: 1. 编译 OpenSSL 静态MT版本
echo 开始编译 OpenSSL...
cd /d "%OPENSSL_SRC%"
:: 检查 Perl(OpenSSL Configure 依赖)
perl -v >nul 2>&1
if %errorlevel% neq 0 (
echo 错误:未找到 Perl,请安装 StrawberryPerl 或 ActivePerl,并确保 perl 在 PATH 中
pause
exit /b 1
)
nmake clean > nul 2>&1
rd /s /q out32 >nul 2>&1
:: 强制使用静态 CRT (/MT)
set "CL=/MT /O2 /W3"
perl Configure VC-WIN64A no-shared --prefix="%OPENSSL_INSTALL%" --release
if %errorlevel% neq 0 (
echo OpenSSL 配置失败
pause
exit /b 1
)
nmake
if %errorlevel% neq 0 (
echo OpenSSL 编译失败
pause
exit /b 1
)
nmake install
:: 清理临时环境变量
set "CL="
echo OpenSSL 编译安装完成
echo.
:: 2. 编译 zlib 静态MT版本
echo 开始编译 zlib...
cd /d "%ZLIB_SRC%"
rmdir /s /q build > nul 2>&1
mkdir build && cd build
"%CMAKE_PATH%" .. -G "%VS_GENERATOR%" -A %PLATFORM%^
-DCMAKE_INSTALL_PREFIX="%ZLIB_INSTALL%"^
-DBUILD_SHARED_LIBS=OFF^
-DZLIB_BUILD_SHARED=OFF^
-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded^
-DCMAKE_C_FLAGS_RELEASE="/MT /O2"^
-DCMAKE_BUILD_TYPE=Release
if %errorlevel% neq 0 (
echo zlib 配置失败
pause
exit /b 1
)
"%CMAKE_PATH%" --build . --config Release --target install -j8
echo zlib 编译安装完成
echo.
:: 3. 编译 cURL 静态MT版本 - 仅禁用3个报错依赖,其余功能全部保留
:: 检查关键依赖有效性
if not exist "%CMAKE_PATH%" (
echo 错误:未找到 CMake,请检查路径是否正确
pause
exit /b 1
)
if not exist "%CURL_SRC%\CMakeLists.txt" (
echo 错误:未找到 cURL 源码,请检查路径是否正确
pause
exit /b 1
)
if not exist "%OPENSSL_INSTALL%\lib" (
echo 错误:未找到 OpenSSL 库目录,请检查路径是否正确
pause
exit /b 1
)
if not exist "%ZLIB_INSTALL%\lib" (
echo 错误:未找到 zlib 库目录,请检查路径是否正确
pause
exit /b 1
)
echo 开始编译 cURL 静态MT版本...
cd /d "%CURL_SRC%"
:: 修复:强制删除build目录(加rd备用,确保删除干净)
if exist "build" (
rmdir /s /q "build" >nul 2>&1
:: 备用删除命令,防止rmdir失败
rd /s /q "build" >nul 2>&1
)
:: 重建build并进入(确保目录切换成功)
mkdir "build" && cd "build" || (
echo 错误:创建/进入build目录失败
pause
exit /b 1
)
:: 核心修复:CMake命令格式规范(注释移出命令行,^后无任何字符)
"%CMAKE_PATH%" .. ^
-G "%VS_GENERATOR%" ^
-A %PLATFORM% ^
-DCMAKE_INSTALL_PREFIX="%CURL_INSTALL%" ^
-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded ^
-DCMAKE_C_FLAGS_RELEASE="/MT /O2" ^
-DBUILD_SHARED_LIBS=OFF ^
-DCURL_STATICLIB=ON ^
-DCURL_USE_OPENSSL=ON ^
-DOPENSSL_ROOT_DIR="%OPENSSL_INSTALL%" ^
-DOPENSSL_USE_STATIC_LIBS=ON ^
-DCURL_ZLIB=ON ^
-DZLIB_ROOT="%ZLIB_INSTALL%" ^
-DZLIB_USE_STATIC_LIBS=ON ^
-DCURL_USE_WINSSL=OFF ^
-DCURL_USE_LIBPSL=OFF ^
-DCURL_USE_LIBSSH2=OFF ^
-DCMAKE_DISABLE_FIND_PACKAGE_Libpsl=ON ^
-DCMAKE_DISABLE_FIND_PACKAGE_LibSSH2=ON
if %errorlevel% neq 0 (
echo cURL CMake配置失败
pause
exit /b 1
)
"%CMAKE_PATH%" --build . --config Release --target install --parallel 8
if %errorlevel% neq 0 (
echo cURL 编译失败
pause
exit /b 1
)
echo cURL 静态MT版本编译安装完成
echo.
:: 验证编译结果
echo 编译完成,验证产物...
if exist "%CURL_INSTALL%\bin\curl.exe" (
echo 找到cURL可执行文件:%CURL_INSTALL%\bin\curl.exe
echo ------------------------------------------------------
"%CURL_INSTALL%\bin\curl.exe" --version
echo ------------------------------------------------------
) else (
echo 未找到cURL可执行文件,编译异常
pause
exit /b 1
)
echo.
echo ======================================================
echo cURL 编译完成!静态MT版本输出目录:%CURL_INSTALL%
echo ======================================================
pause
5、build_all.bat 需要再x64 Native Tools Command Prompt for VS 2022里面运行

6、cd到源码目录执行build_all.bat
编译成功结果验证:

7、lib合并命令 libcrypto.lib libssl.lib zlibstatic.lib libcurl.lib合并成一个libcurl.lib
注意:在x64 Native Tools Command Prompt for VS 2022里面运行
bash
lib.exe E:\test\curl-8.17.0-static\lib\libcurl.lib E:\test\openssl-1.1.1h-install\lib\libcrypto.lib E:\test\openssl-1.1.1h-install\lib\libssl.lib E:\test\zlib-1.3.1-static\lib\zlibstatic.lib /out:E:\test\curl-8.17.0-static\lib_merge\libcurl.lib
8、校验LIb是否为MT
bash
dumpbin /DIRECTIVES E:\test\openssl-1.1.1h-install\lib\libcrypto.lib
dumpbin /DIRECTIVES E:\test\openssl-1.1.1h-install\lib\libssl.lib
dumpbin /DIRECTIVES E:\test\zlib-1.3.1-static\lib\zlibstatic.lib
dumpbin /DIRECTIVES E:\test\curl-8.17.0-static\lib\libcurl.lib
输出里面有"MT"
a、Dump of file E:\test\zlib-1.3.1-static\lib\zlibstatic.lib

b、Dump of file E:\test\curl-8.17.0-static\lib\libcurl.lib
