从源码构建Perl for Win32 B515:32位环境下的工具链选择与避坑实践
简介Perl for Win32 Build B515 是一份完整的 Windows 平台 Perl 解释器源代码适合想弄清脚本语言底层工作原理的开发者也适合需要针对 Windows 进行定制、移植或性能优化的工程师。包内共收录 1128 个文件压缩后大小约 3.96MB包含 C 核心实现、头文件、Perl 模块、扩展接口、构建配置、测试脚本及 POD 文档等涵盖了解释器、工具集和平台适配的各个层面。目前已有 146 人学习下载。阅读代码时可以逐层了解 Perl 的词法扫描、语法分析、语法树生成、符号表管理、内存分配、正则表达式引擎、上下文机制和操作分派等核心进程同时也能看到 Windows 环境下文件操作、进程创建、网络套接字、动态加载等功能是如何通过系统调用和底层库整合进解释器的。借助包内 Makefile、configure 与众多测试文件还能还原编译构建过程学习 Perl 模块的组织方式、CPAN 的发布流程以及回归测试方法。这份原始代码是深入理解解释器设计、编写 XSUB 扩展或做跨平台移植的宝贵参考资料。1. 源码包为什么值得再折腾Perl for Win32 Build B515 的定位与场景你在维护老系统时遇到过一个尴尬局面业务机器是 32 位 Windows运行依赖的脚本版本是 Perl for Win32但官方安装包已经消失剩下的只是一个压缩包名字里写着 Build B515 和“源代码”。Perl for Win32 Build B515 源代码就是这样一份面向 32 位 Windows 的 Perl 构建快照它不是一个安装器而是一套可以被重新编译成 perl.exe 的完整源码。这个问题适合自己动手从源码构建的工程师要么要复现旧环境行为要么要在该源码基础上做扩展和模块适配。下面这条路径会带你从环境隔离、工具链选型走到真正的构建命令和踩坑清单先把原则说明白再给能直接复制的命令。2. 构建前先解决三件事隔离 32 位环境、选定工具链、看懂 win32 目录2.1 32 位环境隔离别让 64 位工具链把构建带到沟里去Perl for Win32 这份源码里的所有编译开关都按 32 位假设组织比如内部整数类型 IV 的宽度、指针大小、模块 ABI。同一个源码如果被 64 位编译器以 64 位模式编译生成的 perl.exe 也许能跑但市面上相关的 XS 库基本都不认这个 ABI等于给自己造了一个无法部署的孤儿版本。所以你拿到源码后第一件事不是急着解压编译而是确认构建环境会不会暗地里变成 64 位。先用两行命令摸底echo %PROCESSOR_ARCHITECTURE% gcc -dumpmachine如果PROCESSOR_ARCHITECTURE返回AMD64说明当前 cmd 进程是 64 位gcc -dumpmachine返回x86_64-w64-mingw32说明编译器默认生成 64 位代码。这两者同时出现意味着直接用默认配置构建一定会得到 64 位产物。要强制 32 位VC 路径下就打开 x86 版命令行窗口MinGW 路径下确认gcc -dumpmachine输出的是i686-w64-mingw32。还有一个容易被忽略的点如果系统同时装了多个版本的 MinGWPATH 里排在前面的是 64 位工具链那你在 cmd 里敲gcc时实际调用的并不是刚才检查过的那个。我一般会把打算使用的工具链完整路径打印出来比如where gcc再判断。这个检查过程虽然看起来多余但省下来的时间远大于构建失败后排错的时间。2.2 选 MinGW 还是 Visual C一个源码包两套玩法源码包本身没有限定编译器但在 Windows 上它提供了两套构建入口。VC 的工具链走 nmakeGCC 工具链走 dmake。两个入口对应同一份源码只是 Makefile 不同。选哪一套取决于你的环境里已经有什么以及之后要不要链接系统 SDK 的库。一个比较实用的判断标准如果接下来准备在源码里打开 OpenSSL、zlib 等扩展VC 路径更容易与 Windows SDK 和第三方预编译库衔接因为很多 Windows 库只发布 VC 版如果只是想要一个干净的 32 位 Perl 解释器MinGW 路径更简单命令更少环境也更容易重建。下表把核心差异放一起方便你按场景对号入座。项VC 构建MinGW 构建构建命令nmakedmake -f Makefile.gcc使用的构建文件win32/Makefilewin32/Makefile.gcc编译器识别配置CCTYPE 设成对应版本CCTYPEGCC适合场景需要对接系统库快速构建纯解释器要特别提醒的是不要把这两个文件搞混。Makefile默认是给 nmake 用的它在语法上遵循微软的 make 规则Makefile.gcc则是给 GNU 系 make 用。如果你在 MinGW 里跑dmake却不加-f Makefile.gcc它默认去读Makefile大概率第一步就报语法错误。选型这件事没有绝对对错关键是选完之后不要再频繁切换因为每切一次工具链都要 clean 一次。2.3 源码树里先看 win32 目录Makefile 和 Makefile.gcc 的分工把源码包解压后不要急着点开顶层的 README先找到patchlevel.h它记录了这个源码对应的 Perl 版本。Build B515 是发行侧的构建计数真正能用来判断兼容性的是这三个宏。在 cmd 里用findstr直接抓findstr /r PERL_REVISION PERL_VERSION PERL_SUBVERSION patchlevel.h输出会是三个以#define开头的宏定义。把三个数字按顺序读成5.x.y你就知道这份源码实际基于哪个 Perl 版本。这个信息很重要因为后续写 XS 逻辑或查模块兼容性时都要以它为准而不是盯着文件名里的 Build 号。然后进win32目录。这份源码在 Windows 上的构建核心都在这个目录里而不是顶层。顶层那个Configure脚本是给 Unix/Linux 用的里面的逻辑依赖 shell 和 POSIX 工具在 Windows 上继续用sh Configure很难跑通。Perl 的 Windows 构建采用了一个更直接的做法把配置项写死在 Makefile 里再用 nmake 或 dmake 去驱动环境和编译。打开Makefile开头注释你会看到大段的编译选项说明。它们不是直接可用而是要先根据自己的工具链打开或关闭。最典型的几个是CCTYPE、WIN64、USE_ITHREADS、USE_LARGE_FILES。修改一个选项后理论上要清掉旧的中间文件再重新构建否则 config 状态和对象文件可能对不上。2.4 构建前确认源码包没有被截断很多老源码包是从迁移硬盘或网盘里捞出来的解压时报错或者目录缺文件的情况并不少见。要检查关键入口是否存在直接列目录dir win32\Makefile* patchlevel.h至少应该看到Makefile、Makefile.gcc、patchlevel.h三个文件。如果缺少说明源码不完整别浪费时间继续。另一个细节是压缩包解压时偶发的 CRC 错误7-Zip 有时会报错但仍然把文件解开这种情况下perl.c或win32.c可能在某个位置被截断编译时会突然报奇怪的行号错误。遇到这种表现第一反应应该是重新找一个完整的原始压缩包而不是去改代码。3. 手把手从源码构建 perl.exe两种工具链的完整命令与参数3.1 用 VC 走通 nmake 构建首先打开适用于命令行生成工具的 x86 原生提示符。如果你对 VS 版本不熟悉可以直接从开始菜单里找名称中带“x86”的那一个而不是默认的 x64。这一步是 2.1 的延续目的是让cl和link都运行在 32 位模式下。然后进入源码目录用记事本打开win32/Makefilecd /d C:\perl-src\win32 notepad Makefile打开后找这几行改成下面的值。注意行首不要留空格Makefile 对缩进有严格解释虽然赋值语句里不严格但不要引入 Tab 符进去CCTYPE MSVC90 WIN64 undef USE_ITHREADS define USE_LARGE_FILES define DEBUGGING undef逐一说明CCTYPE必须与编译器匹配MSVC80 对应 VS2005、MSVC90 对应 VS2008、MSVC100 对应 VS2010再往后还有 MSVC120、MSVC140 等。如果写错nmake 会在初始化时提示无法识别编译器类型遇到这种错误不用猜回注释里找可用列表。WIN64保持 undef确保 32 位路径。USE_ITHREADS开启后解释器的线程模型会映射到 Win32 线程不开启默认是 fork 模拟性能差且行为怪异。USE_LARGE_FILES让文件操作走 64 位偏移现代文件系统下建议打开。DEBUGGING保持 undef带上调试符号会让解释器变慢很多。保存后回到命令行先清理一次再开始构建。这两个动作每次都做能避免残留文件污染nmake clean nmake perl.exeperl.exe目标是只构建核心解释器和必要运行时不编译全部模块第一次构建跑这个目标最快。构建成功后win32目录下会出现perl.exe以及对应的导入库和 dll 文件。如果运行nmake不带目标会把所有扩展模块也编一遍时间可能是刚才的几倍我通常是先确认核心没问题再跑全套。3.2 用 MinGW 走通 dmake 构建MinGW 路径下先确认 dmake 存在。很多精简版 MinGW 只带 mingw32-make 而没带 dmake如果不带 dmake可以用mingw32-make -f Makefile.gcc替代命令参数格式相同。先检查工具链gcc -v dmake -v进入 win32 目录用文本编辑器打开Makefile.gcc。这里不需要写死 CCTYPE 的版本号把它设成 GCC 即可CCTYPE GCC WIN64 undef USE_ITHREADS define USE_LARGE_FILES define然后执行cd /d C:\perl-src\win32 dmake -f Makefile.gcc clean dmake -f Makefile.gcc perl.exe-f Makefile.gcc是必须的因为当前目录下还有一个Makefile默认会让 dmake 读到 VC 版本。构建完成后perl.exe会依赖 MinGW 的运行时库。要把这个 perl.exe 拷贝到别的机器上运行得带上libgcc_s_dw2-1.dll、libwinpthread-1.dll这几个 dll不带的话目标机上会弹找不到动态库的错误。这也是 MinGW 版常见的部署坑。如果构建失败先检查错误是不是发生在编译perl.c等核心文件的阶段。MinGW 下的错误通常比 VC 更直白大多是缺少某些头文件或 C 标准兼容性问题。但老源码在新版 GCC 下编译时偶尔会遇到编译选项警告被当成错误这种情况下可以去Makefile.gcc里搜索-Werror把它删掉或替换成-Wno-error。这种做法不优雅但老版本源码在保留原有行为的前提下这是最务实的解法。3.3 构建产物验证perl -V 和最小脚本构建完成后先不要急着放进业务路径。在构建目录下跑perl -V看编译配置这是快速判断构建是否正确的手段。-V会输出一大段里面能确认几样东西osname、archname、cc、useithreads、useshrplib。cd C:\perl-src\win32 perl -V perl -e print qq{$^V\n};如果archname是MSWin32-x86或者MSWin32-x86-multi-thread说明构建目标是正确的 32 位如果出现x64回 2.1 检查工具链。useithreadsdefine说明线程支持已开启。useshrplib表示指向动态库这一点在最后一章会再展开。$^V打印的是版本对象输出形如v5.x.y它应该和patchlevel.h里看到的三个宏对应。这个输出可以作为脚本判断 Perl 版本的一个依据。再跑一段更接近实际的脚本验证基本 IOperl -e print -f test.txt ? file ok : no file;这里-f是文件测试操作符只是顺手验证文件测试功能是否正常。如果输出no file说明解释器至少能处理文件操作比只打印 hello world 更能说明问题。3.4 构建后清理与归档保留哪些中间文件构建完成后源码目录里会出现大量.o、.obj、.pdb和生成的动态库。如果这不是最后一轮建议保留一个干净的副本用于变量归档。我一般先复制出perl.exe、perl515.dll或同类 dll、lib/目录再决定要不要清理。如果改动过 Makefile建议顺手把当前这份 Makefile 复制一份命名为Makefile.B515.local这样下次重新构建时不会因为覆盖而丢失配置。这是手工维护老版本源码时最值得保留的一步。日志方面可以在构建时用输出重定向保留完整编译信息nmake netperl.log 21这样出错时可以慢慢回看不用在滚动屏幕上找。注意nmake的输出重定向在 cmd 里用的是老版本 cmd 对 stderr 的处理可能不同如果发现没有 21 也不奇怪。4. 避坑清单我每次翻车都会遇到的四类构建问题4.1 cl 命令找不到没进入正确的命令行环境现象普通 cmd 窗口里敲nmake第一行就出现cl 不是内部或外部命令后续所有步骤都停住。原因PATH 中没有 cl.exe也就是当前命令行没有初始化过 VC 环境。解决使用带 x86 的 VS 原生命令提示符或者收到消息后手动调用环境初始化脚本。脚本路径在不同 VS 版本里不同最简单的方式是从开始菜单选择“x86 Native Tools Command Prompt”。如果你坚持在当前窗口里补救常见做法是 call 对应版本的环境脚本但前提是你知道这个脚本落在哪里。4.2 CCTYPE 写错或漏写nmake 在配置阶段中止现象构建开始不久屏幕上滚过一段编译选项检查紧接着报Unknown CCTYPE或nmake fatal error U1052日志没法继续。原因Makefile 中的CCTYPE没有被正确解析可能是拼写、版本代号不对或者行首有不可见字符。解决回到 Makefile 顶部注释找到支持列表对照自己的编译器版本重新填写。修改后必须nmake clean让配置文件重新生成。很多时候代码没问题问题就出在配置状态是脏的clean 能省去大量无意义排错。4.3 构建出来的是 64 位perl -V 直接暴露问题现象构建成功但perl -V里archnameMSWin32-x64跑测试时部分脚本开始因为地址空间假设出错。原因在 64 位系统上打开了默认 64 位命令行窗口或者 PATH 里的 gcc 是 64 位版本。解决严格按照 2.1 的方式确认工具链执行的是 32 位目标。VC 用 x86 命令行MinGW 检查gcc -dumpmachine。改完后先nmake clean再重新构建。这个坑的特征是“构建过程很顺跑起来才出事”所以任何一次构建成功后都应该先perl -V再看业务。4.4 扩展库缺头文件USE_ZLIB/OPENSSL 开关与依赖路径现象构建核心 perl.exe 没问题但一编译IO_Zlib、Net_SSLeay相关扩展就报“找不到 zlib.h”或“openssl/ssl.h”。原因Makefile 里开关已经打开但第三方库不存在或路径没配置。解决如果不需要把对应开关改成 undef如果需要就要准备依赖库并配置LIBS路径。调整后一定先 clean 再重新构建因为 config.h 生成后开关就固定了。这个问题的隐藏点在于即使核心构建不需要这些头文件全量nmake时也会把扩展目录编进来所以跑全量前最好想清楚自己要哪些扩展。4.5 构建到一半被杀毒软件拦住现象、原因与解决现象编译进行到生成临时 exe 或读写动态链接库时构建进程突然终止提示“无法打开文件”或“拒绝访问”且每次失败点都不同。原因某些安全软件会实时扫描新生成的 exe甚至把构建脚本启动的子进程当作可疑行为拦截。解决构建期间把源码目录加入实时扫描白名单或者暂时关闭软件主动防护。这确实是个偏玄学的问题但老机器上很常见。如果你发现错误点一直在不同文件之间跳先别怀疑编译器把防御软件排除掉再跑一次。5. 拿到自建 perl.exe 之后静态链接与独立运行空间的两种走法5.1 静态链接还是动态链接部署形态按需取舍构建产物默认可能有动态链接库也可能只有单个 perl.exe这取决于你使用的 Makefile 目标。对于要复制到老机器或临时修复场景我倾向于构建静态链接的 perl.exe因为它不依赖追加的 dll拷贝单一文件就能运行。查看 Makefile 注释里有没有perl-static.exe或static目标如果有直接nmake perl-static.exe。若没有就在链接参数里去掉生成 dll 的选项这在不同版本写法不同以注释说明为准。形态优点缺点动态链接扩展模块可独立更新支持 C 插件拷贝时需要随带 dll版本容易混乱静态链接单一 exe适合分发体积大后续加 XS 模块困难自建版本主要用于维护旧逻辑时动态链接更常见因为模块可以按需挂载。如果你只是应急跑脚本静态链接更省心。这里没有标准答案取决于你要把这个 perl.exe 作为运维工具还是要面向具体的业务脚本。5.2 用 PERL5LIB 和 -I 隔离自建版本不需要立即安装到系统目录。可以通过环境变量或命令行选项指定模块搜索路径来使用自建版本这样不会干扰系统里其它 Perl 实例。设置环境变量set PERL5LIBC:\legacy-app\lib C:\perl-src\win32\perl.exe -V-V会显示配置但运行脚本时模块搜索路径由PERL5LIB或-I控制。这样你可以同时保留系统里另装的 Perl两者互不干扰。如果你希望未来的每次调用都使用这个自建版本就在系统环境变量里把它的可执行文件目录放到 PATH 前面。这种做法在维护环境迁移时很实用一旦新机器验证通过只需同步环境变量和 lib 目录不用重新安装。实践里最让我省心的习惯是把构建好的 perl.exe 连同它依赖的 dll 放进一个固定的目录同时在源码包里保留修改后的 Makefile 和一份构建备忘录。下次要重新构建或排查问题时照着备忘录走能省掉大半重查步骤。希望这个从源码到可执行文件的过程能帮你在维护那台旧机器时少走弯路也希望你能留下一份足够清晰的构建记录——那才是老源码生命周期里真正值钱的东西希望帮到你。本文还有配套的精品资源点击获取

相关新闻

云端环境配置ST-GCN:从依赖安装到训练跑通全流程

云端环境配置ST-GCN:从依赖安装到训练跑通全流程

1. 为什么要在云端跑ST-GCN:本地环境的三个硬伤做过骨架动作识别的人多半都听过ST-GCN这个名字。它把图卷积和时间卷积拼在一起,专门处理人体骨架序列这种"节点连接"结构的数据,在动作识别、行为分析这类任务里算是绕不开的经典方案…

2026/10/14 2:53:30 阅读更多 →
华硕笔记本风扇控制与显卡模式切换:用 GHelper 免安装管住充电上限

华硕笔记本风扇控制与显卡模式切换:用 GHelper 免安装管住充电上限

华硕笔记本风扇控制与显卡模式切换:用 GHelper 免安装管住充电上限 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook,…

2026/10/14 2:53:30 阅读更多 →
Go JOSE 库实战指南:基于 go-jose/v4 的 JWE 加密、JWS 签名与算法选型详解

Go JOSE 库实战指南:基于 go-jose/v4 的 JWE 加密、JWS 签名与算法选型详解

云原生DevOps运维 【免费下载链接】devtron The only Kubernetes dashboard you need 项目地址: https://gitcode.com/gh_mirrors/dev/devtron 点击查看 免费下载 导读 本文以 devtron 仓库所 vendored 的 github.com/go-jose/go-jose/v4(v4.1.4&#…

2026/10/14 2:53:29 阅读更多 →

最新新闻

Cocos Creator 水波纹效果:Shader 扰动与交互涟漪实现

Cocos Creator 水波纹效果:Shader 扰动与交互涟漪实现

简介:这份资源是面向Cocos Creator开发者的一套水波纹特效项目源码,适合具备一定Shader与脚本基础、希望在游戏中实现动态水面、魔法或雨滴等视觉效果的开发者参考。压缩包共3个文件,以inscode工程配置、html页面与gitignore为主,…

2026/10/14 5:11:01 阅读更多 →
pyKT知识追踪复现框架:统一评测与训练流水线实践

pyKT知识追踪复现框架:统一评测与训练流水线实践

1. 从零散脚本到统一评测:为什么需要一套知识追踪复现框架做知识追踪方向的研究,最让人头疼的往往不是模型本身,而是复现环节。我见过太多这样的情况:论文里报告了一个漂亮的AUC,你兴冲冲地照着描述搭好网络结构&#…

2026/10/14 5:11:01 阅读更多 →
跌倒检测数据集zip文件实战:从解压到baseline的避坑指南

跌倒检测数据集zip文件实战:从解压到baseline的避坑指南

简介:跌倒检测数据集以zip压缩包形式提供,面向计算机视觉、模式识别与机器学习方向的研究者及算法开发者,用于训练和验证跌倒行为识别模型,尤其适合关注老年人健康监护与公共安全场景的智能系统研发。压缩包共收录2000个文件&…

2026/10/14 5:11:01 阅读更多 →
矩阵90度顺时针旋转的原地实现原理与工程实践

矩阵90度顺时针旋转的原地实现原理与工程实践

1. 项目概述:一道被低估的矩阵操作题,藏着工程思维的底层逻辑“牛客网-旋转矩阵/C翻转【简洁实现】”——光看标题,你可能以为这只是算法刷题平台里一道平平无奇的二维数组练习题。但在我带过的几十个模拟项目X训练营中,这道题是淘…

2026/10/14 5:11:01 阅读更多 →
AI芯片软硬件协同设计:从架构到调优的工程实践

AI芯片软硬件协同设计:从架构到调优的工程实践

1. AI芯片软硬件协同设计的核心逻辑1.1 为什么软硬件必须一起设计很多刚接触AI芯片的朋友会有一个误区,觉得芯片设计就是硬件工程师的事,软件团队等流片回来再适配就行。这个思路在传统通用CPU时代勉强能跑通,但在AI芯片领域基本等于自杀。我…

2026/10/14 5:11:01 阅读更多 →
Go语言流程控制详解:for循环、switch与defer的工程实践

Go语言流程控制详解:for循环、switch与defer的工程实践

如果你写过一段时间的 C 或者 Java,刚转 Go 时,流程控制这块第一感觉多半是:怎么这么少?没有 while,没有 do-while,switch 还自带 break,甚至 for 循环都能当 while 用。我一开始也挺不适应&…

2026/10/14 5:10:01 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →