第一步:确认终端环境
打开开始菜单 → MSYS2 UCRT64,执行:
echo $MSYSTEM
which gcc
输出必须:
UCRT64
/ucrt64/bin/gcc
第二步:安装 UCRT64 配套全套工具(UCRT64 终端内执行)
pacman -Syu
如果提示关闭终端,关掉,重新打开 UCRT64 继续。
pacman -S mingw-w64-ucrt-x86_64-toolchain mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-make git
验证工具:
gcc --version
mingw32-make --version
cmake --version
全部正常输出版本号。
第三步:编译 GmSSL‑3(UCRT64 完整命令)
git clone https://github.com/guanzhi/GmSSL.git
cd GmSSL
git checkout tags/v3.2.0
mkdir build_ucrt64
cd build_ucrt64
若提醒连接不到github,可手动下载工程。
在CMakeLists.txt中,找到第229行 附近的add_executable(gmssl-bin ${tools}),用条件判断包起来:
# 替换第229-232行
if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "iOS")
add_executable(gmssl-bin ${tools})
target_link_libraries(gmssl-bin LINK_PUBLIC gmssl)
set_target_properties(gmssl-bin PROPERTIES RUNTIME_OUTPUT_NAME gmssl)
if (WIN32)
target_link_libraries(gmssl-bin PRIVATE Ws2_32)
endif()
# ... 后面的测试相关代码也包在这个if块里 ...
endif()
改成:
# 新增一个option,默认ON表示构建命令行工具
option(BUILD_GMSSL_BIN "Build gmssl command-line tool" ON)
if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "iOS" AND BUILD_GMSSL_BIN)
add_executable(gmssl-bin ${tools})
target_link_libraries(gmssl-bin LINK_PUBLIC gmssl)
set_target_properties(gmssl-bin PROPERTIES RUNTIME_OUTPUT_NAME gmssl)
if (WIN32)
target_link_libraries(gmssl-bin PRIVATE Ws2_32)
endif()
# ... 后面的测试代码也包在这个if块里 ...
endif()
编译命令为:
cmake .. -G "Unix Makefiles" \
-DBUILD_SHARED_LIBS=OFF \
-DENABLE_COMMAND_LINE=OFF \
-DENABLE_TEST=OFF \
-DENABLE_DLOPEN=OFF \
-DBUILD_GMSSL_BIN=OFF
编译:
make -j4
然后可以正常编译输出静态链接库文件。