MinGW-i686:32位Windows原生静态编译确定性方案
简介本资源为面向Windows平台C/C开发者的轻量级原生编译工具链——MinGW-i68632位x86架构完整安装包适用于习惯类Unix开发环境的初学者与中级开发者解决在无Visual Studio场景下构建、调试和链接原生32位Windows应用程序的核心需求。压缩包共2000个文件主体包含1207个头文件.h/.hpp提供标准库与Win32 API声明、219个静态库.a支撑链接阶段、37个可执行工具如gcc、g、gdb、make等、30个构建日志与配置文件.log/.txt以及MSYS基础Shell环境相关组件整体体积47.26MB解压即用结构清晰便于路径配置与模块化调用。目前已有713人学习下载资源内含完整GCC 32位工具链含x86_64-w64-mingw32前缀交叉工具、GDB调试器、Binutils二进制处理套件及readme安装指引特别适合嵌入式底层开发入门、跨平台项目预编译验证及Windows命令行开发环境快速搭建。1. MinGW-i686 是什么不是“另一个 Windows 编译器”而是 32 位 Windows 原生开发的确定性选择你可能刚在某个遗留 C/C 项目里看到mingw32-make报错或在交叉编译嵌入式固件时被提示 “target does not match host”又或者——更常见的是在打包一个依赖libusb-1.0.dll的桌面工具时发现用 MSVC 编译的二进制在老旧工控机上直接弹窗报错“VCRUNTIME140.dll 未找到”。这时候MinGW-i686 不是备选方案而是唯一能绕过 Windows 运行时绑定、生成纯静态/半静态、无外部 VC Redist 依赖的 32 位原生可执行文件的成熟工具链。它不依赖 Visual Studio 安装环境不引入 UWP 或 .NET 框架也不需要管理员权限部署它输出的.exe文件在 Windows XP SP3 到 Windows 1132 位子系统全系可运行且体积常比 MSVC 静态链接版本小 40% 以上。适合三类人维护工业控制软件的现场工程师、为国产 x86 工控平台交付轻量 CLI 工具的嵌入式开发者、以及需要向无管理员权限的客户终端分发“即拷即用”命令行程序的产品交付工程师。这不是复古情怀而是对部署确定性的刚需。2. 为什么必须用 i686-w64-mingw32而不是 x86_64 或 mingw322.1 架构命名的血泪经验i686 ≠ 旧 CPU而是 ABI 约定初学者常误以为i686表示“只能跑在奔腾 Pro 机器上”这是典型误解。实际上i686-w64-mingw32中的i686指的是GCC 编译目标 ABIApplication Binary Interface级别它启用 MMX/SSE 指令集、使用__stdcall作为默认调用约定、并强制对齐 16 字节栈帧——这些正是 Windows 32 位 API如kernel32.dll、user32.dll所要求的二进制契约。而老式mingw32即原始 MinGW.org 项目早已停止维护其 GCC 版本卡在 4.8.x不支持 C17filesystem、无法链接现代 OpenSSL 3.x 的静态库且生成的.dll在 Windows 10 1903 上偶发 TLS 初始化失败。相比之下i686-w64-mingw32属于 MinGW-w64 项目主线当前稳定版GCC 13.2完整支持 C20、POSIX 线程模型pthreads、以及 Windows Vista 新增的 API如GetTickCount64。关键区别在于x86_64-w64-mingw32生成 64 位 PE 文件无法在纯 32 位系统如某些定制 WinPE 或老旧工控固件运行i686-w64-mingw32生成 32 位 PE 文件兼容所有 x86 Windows且内存占用更低指针 4 字节对资源受限环境更友好mingw32非 w64无官方 ARM/AArch64 支持无 UCRTUniversal CRT链接选项已事实淘汰。提示MinGW-w64 的i686工具链并非“降级”而是对 Windows 32 位生态的精准锚定。它不追求跑分而追求“一次编译十年不改”。2.2 安装路径与环境隔离拒绝污染系统 PATH我一般会绝对避免使用在线安装器如 mingw-w64-install.exe或 Chocolatey 安装因为它们常将工具链硬塞进C:\Program Files\mingw-w64导致后续升级时 DLL 版本冲突例如libwinpthread-1.dll被多个项目覆盖。正确做法是下载官方预编译包 https://github.com/mingw-w64/mingw-w64/releases 解压到无空格、无中文、路径深度 ≤ 3 层的目录例如D:\dev\mingw32。然后手动配置环境变量# 在 PowerShell 中执行仅当前会话 $env:PATH D:\dev\mingw32\bin; $env:PATH # 验证 i686-w64-mingw32-gcc --version # 输出应为gcc (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 13.2.0注意i686-w64-mingw32-gcc是完整前缀不可简写为gcc—— 否则易与系统已装的 MSVC 或 Cygwin GCC 混淆。若需全局可用将D:\dev\mingw32\bin加入系统环境变量PATH但务必置于所有其他编译器路径之前顺序决定优先级。2.3 最小可运行 Hello World验证工具链是否真正就绪创建hello.c#include stdio.h #include windows.h int main() { printf(Hello from MinGW-i686!\n); // 调用 Windows API 验证链接能力 MessageBoxA(NULL, Built with i686-w64-mingw32, Success, MB_OK); return 0; }编译命令关键参数逐个说明i686-w64-mingw32-gcc -static-libgcc -static-libstdc -m32 -O2 \ -Wl,--subsystem,windows \ -o hello.exe hello.c-static-libgcc -static-libstdc强制静态链接 GCC 运行时避免部署时缺失libgcc_s_dw2-1.dll-m32显式指定 32 位模式即使在 64 位 Windows 上也必须加否则 GCC 可能默认生成 64 位目标-Wl,--subsystem,windows告诉链接器生成 GUI 子系统程序无黑框若要控制台程序则用console-O2平衡体积与性能-O3在 MinGW 下偶发生成非法指令尤其涉及浮点向量化时。编译后用file hello.exeLinux/macOS或dumpbin /headers hello.exeWindows确认machine字段为x86非x64subsystem为Windows GUI或Windows CUISizeOfImage≤ 512KB静态链接后典型值。3. 静态链接第三方库以 OpenSSL 和 libcurl 为例3.1 OpenSSL 3.2.0 静态编译绕过 DLL Hell 的核心一环OpenSSL 官方不提供 MinGW 预编译包必须源码编译。常见翻车点是Configure脚本识别错误——它默认检测gcc而非i686-w64-mingw32-gcc。正确流程如下在D:\dev\openssl-3.2.0目录执行# 清理旧构建如有 git clean -xdf # 执行配置指定 MinGW 工具链和静态目标 perl Configure mingw no-shared no-tests \ --prefixD:/dev/openssl-static \ --openssldirD:/dev/openssl-static \ --cross-compile-prefixi686-w64-mingw32- # 编译注意用 mingw32-make非 GNU make D:\dev\mingw32\bin\mingw32-make -j4 D:\dev\mingw32\bin\mingw32-make install_sw关键参数说明mingw告诉 OpenSSL 使用 MinGW 构建规则而非VC-WIN32no-shared禁用动态库生成只产出libcrypto.a和libssl.a--cross-compile-prefix显式指定工具链前缀否则make会调用系统gcc导致架构错配install_sw仅安装软件库不含文档/头文件以外内容减少体积。编译成功后D:\dev\openssl-static\lib\下应有libcrypto.a约 12MB、libssl.a约 3MB头文件在include/openssl/。3.2 libcurl 8.9.1 静态集成让 HTTP 请求彻底脱离 DLL 依赖libcurl 依赖 OpenSSL因此必须先完成上一步。解压curl-8.9.1后在 PowerShell 中执行# 进入源码目录 cd D:\dev\curl-8.9.1 # 配置关闭所有动态特性强制静态 OpenSSL ./configure --hosti686-w64-mingw32 \ --prefixD:/dev/curl-static \ --without-libidn2 \ --without-librtmp \ --without-libssh2 \ --without-nghttp2 \ --with-opensslD:/dev/openssl-static \ --disable-shared \ --enable-static # 编译同样用 mingw32-make D:\dev\mingw32\bin\mingw32-make -j4 D:\dev\mingw32\bin\mingw32-make install重点检查configure输出中必须出现checking for OpenSSL... yes (3.2.0)libtool日志中linking static library出现多次D:\dev\curl-static\lib\libcurl.a文件大小 ≥ 8MB含 OpenSSL 静态符号。3.3 在项目中链接一个真实 HTTP GET 示例创建fetch.c#include stdio.h #include curl/curl.h size_t write_callback(void *ptr, size_t size, size_t nmemb, void *userdata) { size_t realsize size * nmemb; fwrite(ptr, 1, realsize, stdout); return realsize; } int main() { CURL *curl; CURLcode res; curl curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, https://httpbin.org/get); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10L); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); // 测试用生产请设为 1L 并配 CA bundle res curl_easy_perform(curl); curl_easy_cleanup(curl); } return 0; }编译命令注意库顺序i686-w64-mingw32-gcc -m32 -O2 -static-libgcc -static-libstdc \ -I D:/dev/curl-static/include \ -L D:/dev/curl-static/lib \ -o fetch.exe fetch.c \ -lcurl -lssl -lcrypto -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32-I和-L必须指向静态库路径-lcurl必须放在-lssl -lcrypto之前链接器从左到右解析curl 依赖 sslssl 依赖 cryptoWindows 系统库-lgdi32等必须显式列出MinGW 不像 MSVC 自动推导若报undefined reference to OPENSSL_sk_num说明 OpenSSL 版本不匹配需重新编译 OpenSSL 并确保--cross-compile-prefix正确。编译后fetch.exe体积约 4.2MB用ldd fetch.exe在 WSL 中验证无任何 DLL 依赖仅ntdll.dll和kernel32.dllWindows 内核基础模块必然存在。4. 避坑5 个让 MinGW-i686 项目集体翻车的边界问题4.1 现象undefined reference to clock_gettime原因clock_gettime(CLOCK_MONOTONIC, ...)是 POSIX 函数MinGW-i686 默认不提供实现MSVC 无此函数Windows 原生用QueryPerformanceCounter。OpenSSL 3.x 在熵收集时默认调用此函数。解决编译 OpenSSL 时添加-DOPENSSL_NO_GETTIMESPEC或在项目中定义宏#define clock_gettime(a, b) QueryPerformanceCounter((LARGE_INTEGER*)(b)) // 并在链接时加 -lwinmm4.2 现象error: ssize_t undeclared here原因ssize_t在 MinGW 头文件中需显式启用_GNU_SOURCE或_POSIX_C_SOURCE。解决在#include前加#define _POSIX_C_SOURCE 200809L #include sys/types.h或编译时加-D_POSIX_C_SOURCE200809L。4.3 现象libwinpthread-1.dll仍被依赖原因-static-libgcc仅静态链接 libgcc但libwinpthreadPOSIX 线程封装默认动态。解决添加-static参数全局静态链接或单独-static-libwinpthreadi686-w64-mingw32-gcc -static-libgcc -static-libstdc -static-libwinpthread ...4.4 现象MessageBoxA显示乱码中文变问号原因MinGW 默认代码页为 CP1252而 Windows 控制台默认 CP936GBK。MessageBoxA接收 ANSI 字符串需转换编码。解决使用MultiByteToWideChar转为 UTF-16 后调用MessageBoxWwchar_t wtext[256]; MultiByteToWideChar(CP_UTF8, 0, 你好, -1, wtext, 256); MessageBoxW(NULL, wtext, LTitle, MB_OK);并在编译时加-municode启用 Unicode 入口点。4.5 现象-O3编译后程序崩溃-O2正常原因GCC 13.x 在 MinGW-i686 下对__builtin_assume和循环向量化存在 bug尤其涉及long double或 SSE 指令时。解决永远用-O2若需更高性能改用-O2 -marchi686 -mtunegeneric禁用-ftree-vectorize。5. 进阶技巧用 CMake 一键管理多配置与符号剥离5.1 CMakeLists.txt声明 MinGW-i686 为唯一目标在项目根目录创建CMakeLists.txt不使用find_package(OpenSSL)等自动探测易匹配到系统 OpenSSL而是硬编码路径cmake_minimum_required(VERSION 3.22) project(fetcher LANGUAGES C) # 强制指定 MinGW-i686 工具链 set(CMAKE_SYSTEM_NAME Windows) set(CMAKE_SYSTEM_PROCESSOR i686) set(CMAKE_C_COMPILER i686-w64-mingw32-gcc) set(CMAKE_CXX_COMPILER i686-w64-mingw32-g) # 静态链接策略 set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc -static-libwinpthread) set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS ${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} -static-libgcc -static-libstdc) # OpenSSL 和 cURL 路径绝对路径避免相对路径错误 set(OPENSSL_ROOT_DIR D:/dev/openssl-static) set(CURL_ROOT_DIR D:/dev/curl-static) # 添加可执行文件 add_executable(fetcher fetch.c) target_include_directories(fetcher PRIVATE ${OPENSSL_ROOT_DIR}/include ${CURL_ROOT_DIR}/include ) target_link_directories(fetcher PRIVATE ${OPENSSL_ROOT_DIR}/lib ${CURL_ROOT_DIR}/lib ) target_link_libraries(fetcher PRIVATE curl ssl crypto gdi32 winspool shell32 ole32 oleaut32 uuid comdlg32 advapi32 winmm # 用于 clock_gettime 替代 )5.2 一键构建脚本消除手动make误差创建build.ps1PowerShell# 清理旧构建 if (Test-Path build) { Remove-Item build -Recurse -Force } # 创建构建目录并进入 New-Item build -ItemType Directory | Out-Null Set-Location build # 调用 CMake指定 MinGW Makefiles cmake -G MinGW Makefiles -DCMAKE_BUILD_TYPERelease -DCMAKE_INSTALL_PREFIXD:/dev/fetcher-dist .. # 编译并安装 mingw32-make -j4 mingw32-make install # 符号剥离移除调试信息减小体积 i686-w64-mingw32-strip --strip-all D:/dev/fetcher-dist/bin/fetcher.exe Write-Host ✅ 构建完成二进制位于 D:/dev/fetcher-dist/bin/执行.\build.ps1后fetcher.exe体积从 4.2MB 降至 2.8MB且objdump -t fetcher.exe | grep debug返回空无调试符号。5.3 验证部署纯净性三步法确认零外部依赖Dependency Walker 替代方案免安装下载depends22_x86.zip官方 Dependency Walker 2.2 32 位版解压后运行depends.exe fetcher.exe左侧树状图中除ntdll.dll、kernel32.dll、user32.dll外不应出现任何红色高亮 DLL表示缺失或黄色警告表示延迟加载。Process Monitor 实时监控运行procmon.exe设置过滤器Process Name is fetcher.exeOperation is CreateFile双击运行fetcher.exe观察结果栏所有PATH NOT FOUND条目应指向C:\Windows\System32\*.dll系统正常查找无任何PATH NOT FOUND指向D:\dev\mingw32\bin\*.dll或libgcc_s_dw2-1.dll。沙箱测试将fetcher.exe单独拷贝至全新 Windows 10 虚拟机未安装任何开发工具在 CMD 中执行fetcher.exe output.txt 21若output.txt包含 JSON 响应且无错误弹窗则证明部署成功。我坚持用这套流程交付所有工控 CLI 工具——不是因为它最酷而是因为客户产线上的 Windows 7 嵌入式设备不允许我解释什么是“VC 运行时”。每次看到fetcher.exe在无任何前置安装的机器上静默运行完 HTTP 请求我就知道那几个小时调clock_gettime兼容性的功夫没白费。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

JsonCpp源码直用:免编译库把JSON解析器集成进C++工程

JsonCpp源码直用:免编译库把JSON解析器集成进C++工程

简介:这是一份 JsonCpp 源码包,面向希望在 C 工程里直接解析、生成 JSON 数据的开发者,核心价值在于省去编译库的配置环节,把源码文件放进项目即可调用。压缩包共 38 个文件,以 14 个头文件和 5 个 C 源文件为主&#…

2026/10/16 21:24:17 阅读更多 →
海康威视闸机对接指南:ISAPI与SDK选型、并发控制及避坑实践

海康威视闸机对接指南:ISAPI与SDK选型、并发控制及避坑实践

简介:一份基于Java SDK的海康威视闸机对接程序源码,面向需要将闸机设备接入业务系统的开发者和系统集成商,重点解决设备控制、通行数据采集与状态监控等常见集成难题。源码覆盖设备查找与连接、身份认证、控制命令收发、事件监听、数据解析存…

2026/10/16 21:24:26 阅读更多 →
海康威视闸机对接程序源码解析:ISAPI与SDK实战指南

海康威视闸机对接程序源码解析:ISAPI与SDK实战指南

简介:面向Java开发者和安防系统集成商的海康威视闸机对接程序源码,基于海康Java SDK实现闸机控制、通行记录读取与状态监控等能力,解决闸机设备远程管理及门禁系统二次集成问题。源码主体围绕SDK引入、设备连接与身份认证、控制命令收发、事件…

2026/10/15 17:58:13 阅读更多 →

最新新闻

xsync集群分发工具原理与实战:基于rsync的生产级配置同步方案

xsync集群分发工具原理与实战:基于rsync的生产级配置同步方案

1. 为什么集群环境下“复制粘贴”根本走不通——xsync不是炫技,而是生存刚需刚接手某高校实验室的分布式计算平台时,我面对的是12台物理节点组成的Hadoop模拟集群。最开始,我习惯性地用scp一条条往每个节点传配置文件:scp core-si…

2026/10/16 21:23:43 阅读更多 →
Cesium 离线地形安装全攻略:从 DEM 切片到 terrainProvider 配置

Cesium 离线地形安装全攻略:从 DEM 切片到 terrainProvider 配置

简介:这份资源面向需要在无网络环境下展示三维地形的Cesium开发者与GIS技术人员,提供将DEM地形tif文件转换为Cesium可加载离线terrain瓦片的完整工具链与操作说明。压缩包共11个文件,约45.9MB,包含msi与exe安装程序、Python脚本、…

2026/10/16 21:23:43 阅读更多 →
双向DC-DC变换器工程落地:PCB布局、控制时序与定点PID实战

双向DC-DC变换器工程落地:PCB布局、控制时序与定点PID实战

简介:本资源为2015年全国大学生电子设计竞赛(电赛)‘双向DC-DC变换器’赛题的完整参赛方案,面向嵌入式电源方向的本科生、竞赛备赛团队及硬件开发初学者,聚焦高精度恒流充电控制与宽输入电压适应性等核心难点。压缩包共…

2026/10/16 21:23:43 阅读更多 →
JVM视角:Java内部类、接口升级与instanceof模式匹配全解析

JVM视角:Java内部类、接口升级与instanceof模式匹配全解析

先说一个我自己的经历。前阵子翻一个老项目里的遗留言代码,看到一个类内部塞了三四个内部类,还有一个匿名类在某个回调里持有外部Activity的引用,结果那页面一直回收不掉,内存抖得厉害。从那次排查之后,我就养成了一个…

2026/10/16 21:23:43 阅读更多 →
从租赁到自建:呼叫中心CTI架构与分阶段实施指南

从租赁到自建:呼叫中心CTI架构与分阶段实施指南

简介:一份面向企业信息化与客服管理岗位的呼叫中心自建整体规划方案,以docx文档呈现,适用于需要从云租赁模式转向自主建设、控制运营成本并保障客户数据安全的项目决策与实施人员。方案围绕自建背景、建设目标、建设原则、分阶段实施步骤及建…

2026/10/16 21:23:43 阅读更多 →
AlphaZero五子棋实战:从零实现自我对弈与MCTS决策系统

AlphaZero五子棋实战:从零实现自我对弈与MCTS决策系统

简介:本资源是基于AlphaZero算法原理实现的五子棋AI教学代码包,面向深度学习初学者与人工智能实践者,聚焦强化学习中自对弈训练、蒙特卡洛树搜索(MCTS)与策略价值网络联合建模等核心环节。压缩包共10个文件&#xff0c…

2026/10/16 21:21:41 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →