Rtools 4.5配置指南:Windows下R包编译报错三步解决法
如果你在 Windows 上跑 R多半有过被install.packages编译报错支配的恐惧。满屏的compilation failed for package xxx或者更直接的WARNING: No Rtools detected能让人瞬间怀疑人生。我最初接触 R 的时候也踩过这个坑一度以为是自己的代码写错了后来才发现是电脑里压根缺少一套“C 语言编译器”。原理其实很简单R 本身是用 C 和 Fortran 写的很多 R 包尤其涉及高性能计算的比如Rcpp、data.table或者托管在 GitHub 上的开发版包本质上就是一坨 C/C 源码。CRAN 虽然会提供编译好的二进制包但当你需要安装 GitHub 上的最新开发版或者某个包刚提交还没来得及出 Windows 二进制版本时install.packages就会调用电脑里的编译器现场“组装”。在 Windows 上这套“组装工具”的官方名字叫Rtools。今天要聊的 Rtools 4.5是专门为当前 R 4.5 系列准备的版本配置过程不算复杂但步骤错了能卡住你一整天。这篇文章会把我最近折腾 Rtools 4.5 的过程以及多次踩坑后总结出的 3 个关键步骤捋清楚想省时间的 Windows 用户可以直接照抄。1. Windows 用户为什么总在编译这一步栽跟头Rtools 在 R 生态中的角色1.1 二进制包与源码包的区别什么场景会触发编译很多刚入门的朋友不理解为什么同样一个install.packages(dplyr)有的电脑装得飞快有的电脑却要吭哧吭哧编译五分钟区别就出在“包的类型”上。CRAN 上大多数稳定版包都有现成的 Windows 二进制包也就是编译好的.zip文件R 下载解压就能用全程不碰编译器。但有些情况会强制走源码编译你安装的是 GitHub 上的开发版比如devtools::install_github(author/package)这些包通常只有源码没有预编译产物。你手动指定了type source。该包涉及 C/C/Fortran 代码且 CRAN 上尚未及时提供当前 R 版本对应的二进制包。一旦进入源码编译流程R 就需要调用外部的编译器。在 Linux 和 macOS 上系统自带或者通过Xcode Command Line Tools安装的gcc通常开箱即用。但 Windows 没有内置标准 C 编译器微软的cl.exe因为许可证和兼容性问题R 社区历来不使用它而是采用 MinGW-w64 项目提供的工具链。Rtools 就是这个工具链的官方整合版。1.2 Rtools 4.5 与 R 版本的对应关系版本错位是最大的坑Windows 用户最容易踩的坑是下载安装包的时候不看 R 版本随手装了个最新版 Rtools结果 R 还是提示找不到编译器。Rtools 和 R 版本是强绑定的。Rtools 4.5 对应的是 R 4.5.x 系列。如果你的R.version.string显示的是R version 4.5.0或更高版本使用 Rtools 4.5 就是唯一正确选择。如果电脑里是 R 4.4 或者更早的版本请去 CRAN 历史归档处下载对应的 Rtools 4.4强行使用新工具链会带来 ABI 兼容问题编译出来的包可能一运行时崩溃。这个对应关系在 R 里有现成函数可以查R.version.string # [1] R version 4.5.0 (2025-04-24 ucrt)一般来说Rtools 安装程序会自动检测系统里的 R 版本但如果用户先后安装过多个 R 版本安装程序可能被绕晕。我的习惯是先把不用的 R 版本卸载干净只保留主用版本再安装 Rtools。1.3 工具链的简单工作原理gcc、gfortran 和 make 分别做了什么不少朋友误以为 Rtools 就是“一个编译器”其实它是个工具链的组合包。搞清楚这几个角色的分工后续排查会轻松很多。gccC 编译器。90% 的 R 包底层 C 代码靠它翻译成机器码。gC 编译器。以 Rcpp 为基础的包会用到。gfortranFortran 编译器。老牌的数值计算包例如data.table的性能核心是 Fortran 写的缺少它会报cannot find -lgfortran一类的链接错误。make构建调度工具。它读Makevars和Makefile文件决定按什么顺序调用 gcc 和 gfortran。类比理解一下gcc 是干活的瓦匠gfortran 是专业的泥瓦匠make 则是拿着施工图指挥大家按顺序操作的项目经理。Rtools 就是把这些工人都装进同一个工棚并告诉 R“需要施工时你就去这里找人”。但如果工棚地址没写进通讯录PATHR 敲门找不到人就会甩给你编译失败的报错。2. 第一个关键步骤选对 Rtools 4.5 安装包并正确完成安装2.1 安装前检查 R 版本与系统架构动手安装前我习惯先确认两件事R 的版本和 Windows 的系统架构。打开 R 控制台输入R.version.string和Sys.info()[machine]。绝大多数现代机器都是 x86-64 架构Rtools 4.5 也默认只提供 64 位工具链——这一点不需要额外操心只需要确认系统不是古董级的 32 位 Windows。如果还在用 32 位系统那可能需要考虑升级设备了因为新的 R 版本已经逐步放弃对 32 位的支持。确认好版本后去 CRAN 的 Windows 工具箱页面或者 R 官网下载 Rtools 4.5 安装包。安装包大概几百兆下载速度取决于你的网络环境建议使用断点续传工具或国内镜像。2.2 安装时必须勾选的组件与默认路径Rtools 的安装界面和普通 Windows 软件差不多但有几个选择比较关键。第一个是安装路径。Rtools 安装程序默认给出的路径通常是C:\rtools45我强烈建议你不要去改动它。因为 R 的某些配置文件尤其是Makeconf在编译时会把路径写死或者按相对位置查找工具链改到含空格或中文的路径比如D:\我的软件\Rtools 4.5会让 make 在解析路径时直接炸掉报错信息还特别难懂。第二个是组件选择。安装过程中会让你勾选要安装的组件我的建议是全选。其中最重要的三个组件是MinGW-w64工具链、gfortran和make。如果你拿不准哪些组件该选就选Select All多占一点磁盘空间约 1.5 GB换取后续编译时的高枕无忧这笔账怎么算都不亏。第三个是环境变量选项。安装程序一般默认勾选“将 Rtools 添加到 PATH”这里我依然建议保持默认勾选。虽然我们等会儿还要手动检查一遍但这一步做了至少能保证大多数场景下环境变量是正确的。2.3 安装完成后的启动顺序问题为什么 R 总是“看不到”新装的工具链这里有一个新手特别容易踩的坑安装完 Rtools 后打开 R 控制台运行Sys.which(gcc)却返回空值或者install.packages依然提示找不到 Rtools。问题的根源不在安装而在 Windows 的环境变量继承机制。Windows 的资源管理器、RStudio、R 进程都是在你双击打开的那一刻读取环境变量的。如果你在 R 已经运行的情况下安装了 Rtools那么这个 R 进程里的 PATH 环境变量还是旧的自然找不到新加入的C:\rtools45\bin。解决方法是安装完 Rtools 后彻底关闭 R 和 RStudio再重新打开。如果问题依旧那就大概率是环境变量本身没配置好直接进入下一步手动配置。3. 第二个关键步骤手动配置 PATH 环境变量让 R 找到隐藏在角落的 gcc 和 make3.1 为什么安装程序已经勾选了“自动配置 PATH”依然可能失效按理说Rtools 安装程序最后一步会帮忙把C:\rtools45\bin添加进系统 PATH但实际操作中我见过不少失效的情况。排查下来主要有三个原因安装时忽略了某个权限弹窗导致环境变量写入失败。某些精简版 Windows 系统或者电脑管家软件拦截了环境变量修改。用户 PATH 和系统 PATH 的写入顺序产生了冲突系统变量里没有用户变量里有但 R 在某些情况下优先读取系统变量。与其反复纠结哪里出了问题不如直接手动配置一次。手动配置虽然看起来原始但结果最可控。3.2 手动修改 PATH 的 Windows 操作路径Windows 11 和 Windows 10 的操作逻辑基本一致我来逐步拆解。按下Win R输入sysdm.cpl然后回车打开“系统属性”。切换到“高级”选项卡点右下角“环境变量”。在“用户变量”或“系统变量”列表中找到Path这一条双击编辑。点击“新建”输入C:\rtools45\bin确认保存。如果列表中已经存在C:\rtools45\bin说明安装程序其实写进去了只是顺序靠后或者 R 进程没刷新检查后关闭窗口即可。这里我建议优先修改“用户变量”而不是“系统变量”。因为用户变量只影响当前账户风险更小且不需要管理员权限。如果你的 Windows 账户名是中文或者用户目录移动过位置系统变量反而可能引发路径解析上的幺蛾子。3.3 在 R 内部临时配置 PATH 的技巧快速排查是否环境变量问题如果你暂时不想重启电脑或者只想快速验证“R 找不到 gcc 是不是 PATH 的锅”可以在 R 控制台里直接手动挂载一下环境变量。Sys.setenv(PATH paste(C:/rtools45/bin, Sys.getenv(PATH), sep ;)) Sys.which(gcc) # gcc # C:\\rtools45\\bin\\gcc.exe看到返回了gcc.exe的完整路径就说明工具链本身没问题R 也认路了。这个临时配置只对当前 R 进程生效下次关掉重新打开 R 就没了所以适合用来做诊断不适合作为长期方案。长期方案还是要按 3.2 里的步骤老老实实改环境变量。改完后记得把 R、RStudio 全部退出重新启动一次让新环境变量生效。4. 第三个关键步骤验证工具链并处理两个经典编译报错4.1 使用 pkgbuild 包执行官方验证一次性测试整套工具链R 生态里有个专门用来检查编译环境的包pkgbuild它比手动逐个检查更全面。install.packages(pkgbuild) pkgbuild::check_build_tools()如果输出结果为Your system is ready to build packages.那就说明 gcc、gfortran、make 全部就位PATH 也配置正确环境搭建已经完成可以正常安装需要编译的包了。如果输出里带着红色的错误提示pkgbuild会直接告诉你缺哪个组件。这个工具给出的错误信息比 R 原生的报错友好得多推荐各位把它当成 Windows 编译环境的“体检仪”。4.2 经典报错一running make failed这是我在 GitHub 上装开发版包时最常碰到的问题报错信息一般长这样ERROR: compilation failed for package xxx running make failed Error: Failed to install xxx from GitHub:出现这个报错尽管最后的落点在make但多数情况下问题不在 make 本身而在它前面几步的编译环节。真正要排查的是以下两个方向路径污染。检查一下Sys.getenv(PATH)里是否出现了多个 Rtools 路径比如既有C:\rtools40\bin又有C:\rtools45\bin。多个版本的工具链混在 PATH 里会导致 make 找到错误的gcc版本进而出现诡异的链接错误。解决办法是只保留当前 R 版本对应的那个。Makevars 残留。Windows 用户目录下经常残留一个~/.R/Makevars文件里面可能写了旧版本 Rtools 的路径比如C:\rtools40\mingw64\bin。R 编译包时会优先读取这个文件里的配置导致它去旧路径里找工具链结果当然是找不到或者版本不匹配。排查方式是在 R 里运行file.edit(~/.R/Makevars)如果有内容先备份后重命名为Makevars.bak再重新安装试试。确保清理掉过时的配置大概率能解决问题。4.3 经典报错二找不到gfortran或-lgfortran另一个高频报错是cannot find -lgfortran collect2.exe: error: ld returned 1 exit status这里的-l是链接器选项表示“link”gfortran是要链接的库名。报错说明你的工具链里根本没有 Fortran 编译器或者对应的运行库。这个错误在 Rtools 安装不完整时特别常见。很多人安装 Rtools 时为了省空间取消勾选了gfortran组件结果碰到data.table这类有 Fortran 依赖的包就傻眼了。解决办法很简单重新运行 Rtools 安装程序选择“修改”把gfortran组件补装上即可。装完重启 R再走一遍 4.1 的验证流程。4.4 一个容易被忽略的验证细节检查 R 的百位类型与工具链一致性R 4.2 之后Windows 版本默认使用 UCRTUniversal C Runtime作为 C 运行时库。Rtools 4.5 也是严格配套 UCRT 的。如果用户从某些非官方渠道下载过旧版工具链或者修改过 R 的安装文件可能会出现 R 与 Rtools 的运行时库不同步的问题这种情况单纯配置 PATH 解决不了只能彻底卸载后重装官方版本的 R 和 Rtools。检查运行时一致性没有直接的 R 命令但有一个简单粗暴的判断方法如果安装的是 CRAN 官方 R 和官方 Rtools 4.5且环境变量只指向C:\rtools45\bin基本可以保证运行时一致性。凡是出怪异问题的基本都是混装了非官方版本。5. Rtools 配置好之后那些仍会让 Windows 用户崩溃的隐藏坑5.1 用户目录权限与中文用户名带来的编译障碍R 在编译过程中会在临时目录生成大量中间文件。这套流程本身倒是没问题但用户目录权限不足或路径含中文时麻烦就来了。比如某些用户的 Windows 用户名是“张三”用户目录就是C:\Users\张三。R 的临时目录和~/.R目录都会落到这个路径下。部分编译工具在解析中文路径时会出现编码问题报错信息往往是invalid argument或者No such file or directory让人摸不着头脑。一个可行的规避思路是修改系统的临时目录环境变量让 R 的编译临时目录落在纯英文路径下Sys.setenv(TMPDIR C:/Temp) dir.create(C:/Temp, showWarnings FALSE)如果情况允许更彻底的办法是创建一个英文名的 Windows 管理员账户专门用于数据分析工作。5.2 Makevars 文件的残留旧配置如何破坏新工具链前面已经提过 Makevars但这里想展开来说一下因为它太容易被忽略了。许多老玩家在早期配置 R 时会在~/.R/Makevars里写入自定义编译选项比如CXXFLAGS -O2 -mtunenative CXX11FLAGS -O2 -mtunenative这些代码本身没有错但如果里面的路径指向了旧版 Rtools比如C:\rtools40\bin那么在新版本 R Rtools 4.5 的框架下轻则警告重则报错。我在帮别人排查问题时经常撕开这个文件看到一堆过时的路径设置。建议拿到新电脑或升级 R 版本后养成检查~/.R/Makevars的习惯。最好的状态是让这个文件保持空白或者只保留不依赖具体路径的通用优化选项。凡是写死了绝对路径的都应该删掉。5.3 系统预装编译器与 Rtools 发生冲突时的处理方案部分用户为了其他开发需求电脑里装了 MSYS2、Cygwin 或者 WSL这些工具也可能提供gcc和make。它们和 Rtools 并存时会互相争夺 PATH 中的优先地位。如果你在运行Sys.which(gcc)时发现指向的不是C:\rtools45\bin\gcc.exe而是其他路径像C:\msys64\usr\bin\gcc.exe那安装任何需要 Rust、Cython 或者 C 的包都会失败。因为 Rtools 之外的gcc缺少配套的 R 头文件和链接库。处理方法有两条路一是在系统环境变量的 PATH 列表里把C:\rtools45\bin手动上移到最前保证优先找到的是 Rtools 的编译器二是临时给 R 单独指定路径用 3.3 的方式在当前会话里强制覆盖。5.4 安装Rcpp和data.table的实战验证清单完成以上所有配置后我一般会用两个在编译方面最有代表性的包作为“验收实验”。跑通这两个其他包基本不会有问题。install.packages(Rcpp) install.packages(data.table)Rcpp是 C 包的典范能验证 g 是否可用data.table包含了大量 C 和 Fortran 代码能验证 gcc 和 gfortran 是否协同工作。如果这两个都顺利编译安装说明你的 Rtools 4.5 环境已经彻底就绪。我在实际处理环境问题时通常会在看到编译报错后先打开 R 运行一遍Sys.which(gcc)。如果路径准确指向C:\rtools45\bin\gcc.exe那就把重点放在包本身的依赖上如果返回空值则立刻执行临时挂载 PATH 的代码把 Rtools 挂到当前进程里十次有九次能当场解决。确认临时方案可行后再静下心来把用户变量持久化配置好这样新开的 R 窗口就能直接使用工具链。这套三步走的排查思路我帮不少同门处理过编译问题基本上十几分钟内能解决九成以上的 Windows 编译报错。剩下那一成多半是杀毒软件把C:\rtools45\bin\gcc.exe误判成恶意程序隔离了去信任区里添加一下 Rtools 的根目录就能恢复。希望能帮你少走些弯路。

相关新闻

Jedis 实战指南:从连接池到 Spring Boot 整合的 Redis 客户端入门

Jedis 实战指南:从连接池到 Spring Boot 整合的 Redis 客户端入门

1. 为什么 Jedis 是理解 Redis 客户端的最佳起点很多人学 Redis 的路径是这样的:装好服务端,用命令行敲几个SET、GET,觉得挺简单,然后打开项目准备用 Java 连一下,结果第一步就卡住了——到底该用 Jedis、Lettuce 还是…

2026/10/12 13:21:32 阅读更多 →
pstack-claude:本地化Claude代码调试工作流

pstack-claude:本地化Claude代码调试工作流

1. 项目概述:pstack-claude 是什么,它解决的是哪类开发者的实际痛点?pstack-claude 这个名字乍看像一个工具组合词,但拆解后非常有信息量:“pstack”是 Linux 系统中一个真实存在的诊断命令,用于打印指定进…

2026/10/11 8:04:44 阅读更多 →
impeccable:一套把代码质量自查变成开发默认动作的工作流

impeccable:一套把代码质量自查变成开发默认动作的工作流

“impeccable”这个单词,是我做过最拧巴的一个项目代号。做工程的人都清楚,市面上从来就不缺“质量工具”:静态检查、代码规范、单测覆盖率、构建门禁,一抓一大把,每个单拎出来都能讲出十几页的“最佳实践”。但真正把…

2026/10/12 16:05:23 阅读更多 →

最新新闻

cx_Oracle.DatabaseError: DPI-1047 找不到 64-bit Oracle Client library 的排查与修复

cx_Oracle.DatabaseError: DPI-1047 找不到 64-bit Oracle Client library 的排查与修复

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

2026/10/12 21:28:12 阅读更多 →
计算机网络专业自我鉴定:用协议级复盘替代空泛套话

计算机网络专业自我鉴定:用协议级复盘替代空泛套话

简介:本资源是一份面向计算机网络专业应届毕业生的个人自我鉴定范文,适用于求职简历附件、毕业档案材料准备或思政类课程作业参考。文档内容结构完整,涵盖思想品德、专业学习、实践能力、综合素质与职业展望五大维度,突出网络专业…

2026/10/12 21:28:11 阅读更多 →
自旋锁与信号量:从原理到选型,彻底搞懂忙等与睡眠机制

自旋锁与信号量:从原理到选型,彻底搞懂忙等与睡眠机制

1. 为什么这两个词总被放在一起比较但凡写过几年多线程代码,或者啃过操作系统内核源码的人,几乎都绕不开自旋锁和信号量这两个词。面试被问,代码review被问,排查线上性能问题时还是绕不开它们。但很多人对它们的理解停留在“一个忙…

2026/10/12 21:28:08 阅读更多 →
Kurento WebRTC入门踩坑指南:KMS兼容性与信令调试实战

Kurento WebRTC入门踩坑指南:KMS兼容性与信令调试实战

1. 为什么一个“Hello World”能卡住三天?——Kurento初学者的真实困境你点开Kurento官网,找到那个标着“Quick Start”的helloworld示例链接,心里想:“不就是跑个流媒体最基础的回显demo吗?五分钟搞定。”结果呢&…

2026/10/12 21:28:06 阅读更多 →
干货分享|MaxKB + MCP 智能问数方案及步骤详解:从数据接入到问答验证全流程

干货分享|MaxKB + MCP 智能问数方案及步骤详解:从数据接入到问答验证全流程

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

2026/10/12 21:28:03 阅读更多 →
HoRain云--OpenCode 配置文件:把 settings 改到 TaoToken 的完整实操

HoRain云--OpenCode 配置文件:把 settings 改到 TaoToken 的完整实操

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

2026/10/12 21:27:02 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →