ICC编译器优化实战:从GCC迁移到PGO的避坑指南
简介《ICC User Guide iccug》是 Cadence 官方推出的 ICC 工具用户指南面向数字集成电路验证工程师围绕 ncsim 仿真环境系统讲解覆盖率收集、分析与收敛的完整流程资源为 PDF 文档共 1 个文件压缩包大小约 14.09MB。文档详细介绍了 ICC 的安装与设置语句、分支、条件、路径等覆盖率模型定义仿真过程中覆盖数据的实时捕获与报告生成不同阶段覆盖率数据的合并比较以及与 Specman Elite、SystemVerilog UVM 等环境的交互和脚本自动化还包含常见问题排查、性能优化、许可证管理和版本兼容性说明适合从初学者到有经验工程师按需查阅。目前已有 293 人学习下载阅读后能够快速掌握从覆盖率建模、数据采集到报告分析的完整工作流发现设计中的未覆盖区域科学制定验证策略并评估设计完整性尤其在大规模 SoC 验证项目中可显著提升收敛效率。1. ICC User Guideiccug到底解决谁的编译焦虑同一段 C 代码GCC 默认参数编译要跑 18 秒换成 ICC 加三行参数同一台机器直接掉到 9 秒。可你要是照抄网上那些“终极优化参数”换台机器就可能段错误、跑错结果甚至链接阶段就卡住。ICC 就是这样上限很高脾气也大。ICC User Guide简称 iccug就是这套经典编译器的官方用户指南它讲的不是玄学而是一整套命令行逻辑——从 -O 系列优化等级、-xHost 指令集选择、-ipo 跨文件优化到数学库、调试开关、性能报告。它解决的问题很直接尽量不改代码把 CPU 密集和数值计算类程序榨出性能同时让你知道每个参数在干什么而不是把编译优化当成一个黑匣子。受众也很明确刚被要求“用 ICC 编译跑一下”的开发者、接手 HPC 与科学计算项目的人以及想搞明白为什么同一份源码在不同优化参数下差距那么大的调优者。下面这几章我把这套指南里最常用、最容易踩坑的部分拆开讲你可以边看边对着终端敲。2. 把 ICC 跑起来从 GCC 无缝切过来的最小编译命令2.1 先用三行命令确认 ICC 环境与版本兼容性接手一台新机器时我最烦的不是代码编译不过而是根本没搞清这个 icc 是从哪来的、配套的 GNU 工具链是什么版本。ICC 有一个老传统复用系统里 GCC 的头文件和标准库所以 GCC 太老或太新都会直接影响 ICC 的编译行为甚至让你在错误信息里看到一堆 libstdc 的报错。我通常先敲这三行which icc icc --version icc -dM -E - /dev/null | grep -E __INTEL_COMPILER|__GNUC__|__x86_64__第一行确认编译器本体在不在 PATH 里找不到时常见做法是去编译器的默认安装路径下找 setvars.sh 这类环境初始化脚本把编译器 bin 目录加进 PATH。第二行看版本字符串注意不要只看第一行后面的 GCC 兼容版本信息往往才是排错关键。第三行把预定义宏直接打印出来__INTEL_COMPILER是 ICC 自身的版本宏__GNUC__表示它当前模拟的 GNU 版本__x86_64__则确认是 64 位模式。参数说明-dM是 dump all macros 的意思-E只做预处理后面跟-表示从标准输入读空文件。这三行组合在一起能在一分钟内判断“编译器版本 兼容层版本 目标架构”三件事。确认完环境再动手能省掉后面一半的怪问题。很多看起来莫名其妙的头文件报错根源都在这里。2.2 从 GCC 切到 ICC 的第一个 Makefile 改动最常见的接入方式不是从零写构建脚本而是把现有 GCC 工程里的编译变量换成 ICC。我先不碰编译选项只做最小替换CC icc CFLAGS -O2 -stdc99 -Wall LDFLAGS -lm把CC从 gcc 改成 iccCFLAGS保留常用的-O2 -stdc99 -Wall然后make clean make看结果。这里有个容易被忽略的细节-std必须按项目实际写法来选。ICC 默认对 C 语言用偏 GNU 扩展的标准兼容性很好但会把代码里一些“应该报错”的写法放过去反过来如果项目是按 C89 写的你却用-stdc11去编译可能在隐式声明这种位置突然冒出一片 error。我的习惯是先看一眼现有 Makefile 里 gcc 用的-stdICC 保持一致再逐步收紧。链接阶段最常见的坑是库顺序。GCC 时代把-lm放在最前面通常也能过因为 gcc 对链接顺序相对宽容但换到 ICC 后链接器会严格按从左到右解析符号-lm放在源文件之前就可能导致数学函数报 undefined reference。所以 LDFLAGS 里选项目原本的顺序不要凭感觉重排。2.3 第一次编译就翻车的三个典型原因头文件、库顺序、语言标准先说头文件。ICC 的默认 include 路径来自它自己的编译器目录而不是系统 GCC 的目录。当你装过多个 GCC 版本时系统里会有好几套头文件ICC 挑中的可能不是项目默认那套。现象就是/usr/include/stdio.h: 找不到或者一堆 glibc 内部定义报错。解决方式不是去硬改头文件而是用icc -v查看它实际搜索的 include 路径确认指向了哪个 GCC 版本必要时用-I明确指过去。再说库路径。动态库的依赖关系用ldd看编译期链接用-L和-l决定。ICC 对-L的处理和 GCC 基本一致但如果你在 LD_LIBRARY_PATH 里配置了某些库运行时加载器会优先找它可能把系统库版本顶掉。遇到“编译通过运行报 GLIBCXX not found”这类问题先ldd ./app看看实际加载的是哪条路径通常比反复重编快得多。最后是语言标准。换编译器后最常见的报错集中在隐式函数声明、旧式函数定义、结构体赋值这三种写法上。老代码在 GCC 的宽松模式下能过在 ICC 的严格模式下就崩。处理时不要一上来就加-fpermissive这种“后悔药”先确认报错文件属于哪个模块、当时的-std是什么。该改代码的地方改代码不该放宽标准的不要放宽。2.4 iccug 里最容易被跳过的两个信息区诊断输出与 -help 分类ICC 编译错误信息的格式比 GCC 多了一个编号比如error #1234: ...。你真正要查的是编号 1234而不是后面那段英文描述因为同一个编号在不同版本里的措辞可能变但含义稳定。我一般把错误上限调大看全icc -stdc11 -diag-error-limit0 -c demo.c-diag-error-limit默认限制在 100 条左右对一个满是问题的旧文件来说根本不够用改成 0 表示不限制让所有诊断一次吐完。这个开关在 GCC 里没有直接对应项属于换 ICC 后值得第一个记住的参数。另一个信息区是icc -help输出的分类索引它会按“优化、并行、编译控制、代码生成”等类别把参数分组列出来比在网页里翻指南快得多。遇到不确定的参数先用icc -help定位它属于哪一类再去对应的分类里看相邻参数通常能找到你要的替代方案。提示ICC 的大多数参数都有正反两种写法例如-qopenmp与-no-qopenmp。排查问题时先确认你是把参数打开还是关掉了别在开关方向上调反。3. 性能从“能跑”到“能打”O 系列 / xHost / IPO 的取舍边界3.1 -O2 与 -O3 的真正差距不在“优化”而在“假设”很多人以为 -O3 是“更用力地优化”其实它和 -O2 的差别更像是一组“是否允许编译器替你做假设”的开关。举个例子-O2 默认能做的优化是安全的不改变程序语义不改变可观察行为。-O3 则会主动做更激进的循环变换、更深的函数内联以及默认开启自动向量化这些优化的前提是“浮点数顺序无所谓”“内存没有别名冲突”“循环没有依赖关系”。如果这些前提在项目里不成立结果就是 -O3 编译更快了输出却和 -O2 不一致。这也是很多数值模拟项目不敢直接上 -O3 的原因。等级主要行为适用场景风险-O0不做优化调试、配合插桩速度最慢行为最忠实-O1局部优化快速验证代码逻辑低-O2默认推荐语义安全大多数生产发布低-O3激进向量化与内联数值计算、热循环密集需验证数值一致性我的选择标准是如果项目对数值结果有强复现要求先用 -O2 做基线再用 -O3 对比同一组输入的结果。结果一致就上 -O3不一致就逐函数排查而不是全局退回 -O2。这个排查习惯在后面的避坑部分还会用到。3.2 -xHost 是把双刃剑本机快、换机崩-xHost的语义很直白让编译器自动检测当前机器的 CPU 支持哪些扩展指令集然后按最激进的指令集生成代码。在本机压测时它往往比手写-mavx2更省事因为检测逻辑是自动的但它的可移植性几乎为零——在本机编出来的二进制拿到不带 AVX-512 的旧机器上会直接在第一条向量指令处非法指令崩溃连报错信息都看不懂。# 本机压测用快但不要拿这个二进制分发 icc -O3 -xHost -o app_local app.c # 跨机器发布用保守指令集换机器不会崩 icc -O3 -xCORE-AVX2 -o app_release app.c第二行的-x系列参数里CORE-AVX2表示目标指令集。通常发布给内部小团队用 AVX2 就够公开给旧设备多的地方则要压到 SSE4.2 甚至更旧。想要一份二进制同时跑多种指令集可以用-ax生成多版本调度二进制运行时自动挑选最合适的路径代价是二进制体积变大。这个功能很实用适合“目标机器不确定”的发布场景但新手不推荐一上来就用先用明确的单版本跑通再考虑多版本。3.3 -ipo 与 -prof-use 的组合跨文件优化何时值得开-ipo是跨文件优化它让编译器把多个源文件放到一起来分析从而能做跨函数内联、常量传播这类单文件看不到的优化。数值计算项目常见的“一个循环分散在两个 .c 文件里”的场景用不用 -ipo 差距很大。但代价也很实在编译耗时翻倍增量编译基本失效因为任何一个文件改动都可能让整个程序重新分析。# 跨文件优化必须在最终链接时仍然指定 -ipo icc -O3 -ipo -c matmul.c -o matmul.o icc -O3 -ipo -c solver.c -o solver.o icc -O3 -ipo matmul.o solver.o -o app注意三个命令都必须带-ipo中间的.o文件不是普通对象文件而是带编译器内部中间表示的“丰满版”对象。如果你在中间某一步漏了-ipo后面链接时要么报格式错误要么退化成单文件优化等于白编一遍。-prof-use和-ipo经常一起出现是因为 profile 数据能让跨文件的内联决策更准这部分我在最后一章单独展开。3.4 一个能抄的参数模板与快速验证命令你不需要把所有参数背下来但最好手上有一套可复用的组合。我用得最多的是下面这套先保证正确再谈提升# 基线版本-O2语义最稳 icc -O2 -o app_base app.c # 优化版本-O3 本机指令集 跨文件优化 icc -O3 -xHost -ipo -o app_opt app.c # 用同一份数据对比运行时间 /usr/bin/time -f %e s ./app_base input.dat /usr/bin/time -f %e s ./app_opt input.dat diff (./app_base input.dat) (./app_opt input.dat)/usr/bin/time的-f %e只输出墙钟秒数比 shell 自带的time更干净。最后的diff是对比两者输出这一步比跑分重要得多——性能再好看输出不对等于白做。如果我发现 -O3 比 -O2 慢第一反应不是改参数而是看是不是数据分布导致分支预测失效这时候要做的是换数据、加 profile而不是继续堆选项。参数模板的应用场景大致分三类场景推荐组合说明本机压测-O3 -xHost -ipo跑分数不分发跨机器发布-O3 -xCORE-AVX2 -ipo保守指令集体积适中PGO 完整流程-prof-gen → 运行 → -prof-use最后一章详述若代码里用了 OpenMP 指令则在上述组合后补-qopenmp没有并行代码时加不加无影响。4. ICC 避坑-fast 不是银弹10 次翻车里 8 次出在这些参数4.1 现象加 -fast 后程序起不来或者崩得莫名其妙-fast看起来像个“一键加速”开关实际它是好几个参数的拼接体常见展开里包含 -O3、-ipo、-xHost、-static、-no-prec-div 这类激进选项。问题通常出在-static动态库里的行为被固化进二进制运行环境稍有差异就段错误。另一个问题是-no-prec-div让浮点除法不再严格精确数值敏感的代码会悄悄偏离预期。解决先用icc -fast -dryrun看它到底展开成了哪些参数再决定保留哪几个。我一般会把 -fast 拆成 -O3 -xHost -ipo 三件套去掉 -static 和 -no-prec-div既拿到大部分性能又避开两个最大的坑。4.2 现象OpenMP 链接报错或者线程数怎么调都不对项目里原有的-fopenmp是从 GCC 带过来的换到 ICC 后链接器开始报libgomp与libiomp5冲突或者运行时线程数永远是 1。原因是机器上同时装了 GCC 的 OpenMP 运行时和 ICC 的 OpenMP 运行时两个库的符号互相干扰。解决全工程统一改用-qopenmp同时把链接参数里的-fopenmp彻底清掉别在 CFLAGS 和 LDFLAGS 里各留一半。运行时线程数用OMP_NUM_THREADS控制绑核则用KMP_AFFINITY。规则很简单要么全用 GCC 工具链要么全用 ICC 工具链混着用必踩坑。4.3 现象浮点结果和 GCC 版对不上差在最后几位不同编译器、不同优化等级下浮点数求和顺序不同结果在小数点后几位有差异是正常的不一定是谁的 bug。但如果你项目的验收标准是“完全一致”那就要注意 -O3 下 ICC 会用 FMA融合乘加指令涉及除法时还会用近似精度更高的替代算法。解决加-fp-model precise让编译器在可接受的性能损失内保持更严格的浮点语义。同时把-no-prec-div这类反向开关去掉并显式确认。性能损失通常在 10%~20%但对结果一致性要求高的项目这点损失值得。先确定项目到底需不需要严格一致需要的话就把浮点模型写死在 CFLAGS 里不要留给后人猜。4.4 现象调试时变量全是 optimized out开启 -O2 后编译器把大量局部变量优化进了寄存器或直接消除调试器里看到的全是optimized out断点也经常跳不到预期位置。这不是 ICC 的 bug是优化编译器在默认生成调试信息时只保留了最少量的映射关系。解决调试构建单独用-O0 -g编一份发布构建再回到-O2 -g。如果你确实要在优化版本里调试加上-debug extended这类参数能拿到更多变量位置的描述但仍不保证全部可看。我的习惯是准备两个构建目录一个 debug 一个 release互不干扰省得每次来回改 CFLAGS。4.5 现象改参数之后“没生效”像没重新编译一样调了半天参数发现跑分没变再一看 build 目录里躺着一堆旧 .o 文件。Makefile 里依赖关系没写全时改 CFLAGS 并不会让所有文件重新编译ICC 在增量编译场景下和 GCC 一样看时间戳看不出参数变化。解决改编译参数后不要只make直接make clean make -j或者把 build 目录整个删掉重建。更稳妥的做法是在 Makefile 里把关键参数写进一个配置文件让依赖系统能感知到。血的教训跑分前先确认二进制是新的ls -l看一眼时间戳顺手strings看一眼二进制里有没有你刚加进去的参数痕迹很多“优化无效”其实都栽在这。5. 进阶用 PGO 把热路径榨干以及几个常被忽略的小开关5.1 三步走-prof-gen、代表性数据、-prof-use普通优化是编译器猜热点PGOProfile-Guided Optimization是让它看到真实热点。流程就三步先用插桩版本编译跑一遍代表性数据再用采集到的 profile 重编终版。# 第一步插桩编译产物里带收集代码 icc -O3 -xHost -ipo -prof-gen -o app_pgi app.c # 第二步用代表性数据运行一次生成 profile 文件 ./app_pgi training.dat # 第三步读回 profile重新编译终版 icc -O3 -xHost -ipo -prof-use -o app app.c-prof-gen产生的 .dyn 文件在程序运行时变成 .dpi-prof-use会找到当前目录下的 profile 文件并据此做分支优化和函数内联决策。这里最关键的不是命令而是 training.dat 能不能代表真实负载。我用错过一次训练数据热点判断全偏终版反而比普通编译还慢。所以 PGO 前一定要先有 baseline确认输入分布、数据量级与线上基本一致再用插桩版本跑。训练那一步慢是正常的别因为慢就换小数据小数据骗过编译器之后花的时间都要还回来。5.2 两个值得写进习惯的小开关-qopt-report5会把每个函数的优化决策导出成报告文件告诉你哪个循环被向量化了、哪个函数被内联了、哪些尝试因为什么原因被放弃。排查性能问题的时候先看这个报告再调参数比盲试选项高效得多。-qno-vec则用来做反向验证关掉自动向量化重编一次对比跑分就能确认向量化到底是赚是赔。我自己跑 ICC 项目有个固定习惯先-O2做基线确认正确性再上-O3 -xHost -ipo对比结果与跑分最后才考虑 PGO。任何一步差异大先倒回上一步查原因而不是加更多参数把问题盖住。这套流程走下来你基本不会再觉得编译优化是玄学。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Power Query描述性统计:M语言函数与批量模板实战指南

Power Query描述性统计:M语言函数与批量模板实战指南

做Power BI的人基本都遇过这类时刻:数据清洗已经在Power Query里做完了,下一步想快速知道当前这张表里各数值字段的均值、中位数、标准差大概长什么样,有没有异常高或异常低的离群值。多数人的第一反应是把数据复制回Excel算一遍,…

2026/10/14 5:02:00 阅读更多 →
智能体记忆工程:范式分野与分层选型架构实战指南

智能体记忆工程:范式分野与分层选型架构实战指南

1. 从“失忆”的智能体说起:为什么记忆工程突然成了分水岭做过智能体项目的人大概都经历过这种尴尬:你精心搭建了一个能调用工具、能多轮对话的智能体,演示的时候行云流水,一旦用户隔了三天再回来,它就像换了个人——完…

2026/10/14 5:02:00 阅读更多 →
C/C++调用netsh实现Windows动态IP与静态IP切换实战

C/C++调用netsh实现Windows动态IP与静态IP切换实战

1. 从一个真实需求说起:为什么要在程序里改IP做Windows桌面端开发或者自动化运维工具的朋友,大概率都碰到过这样一个场景:设备部署到客户现场之后,网络配置是写死的静态IP,但客户那边的网段跟出厂预设不一样&#xff0…

2026/10/14 5:02:00 阅读更多 →

最新新闻

家电品牌出海GEO优化公司推荐:家电品牌如何判断服务商实力

家电品牌出海GEO优化公司推荐:家电品牌如何判断服务商实力

家电品牌做 GEO,首先要解决的是信息能否被 AI 讲对。型号、容量、认证、安装和售后等内容,都需要按目标市场整理,并通过持续监测验证实际呈现。 家电品牌在评估广拓时代CantoTimes时,可以重点看其自研系统、产品资料整理、海外内容…

2026/10/14 13:31:30 阅读更多 →
动力电池液冷板内部流道5类结构设计要点与Fluent散热效果对比分析方法详解

动力电池液冷板内部流道5类结构设计要点与Fluent散热效果对比分析方法详解

动力电池液冷板是电池热管理系统的核心部件。其内部流道结构直接决定电芯温度均匀性和系统压降。设计不当会导致局部过热、温差过大、泵耗过高等问题。本文从流道设计基础出发,梳理5类常见流道结构,并说明用Fluent进行散热效果对比分析的方法。一、流道设…

2026/10/14 13:31:30 阅读更多 →
显存不够怎么降?本地跑大模型的 5 级降级顺序表(8G 实测)

显存不够怎么降?本地跑大模型的 5 级降级顺序表(8G 实测)

8G 卡跑 14B 直接 OOM,我是怎么一步步退下来的 前两天在一张 8G 的老卡上加载一个 14B 的 Q4_K_M,Ollama 那边直接报内存不够,换 llama.cpp 加载也是分配失败。我的第一反应是"换更低的量化档",结果换完照样起不来。后来…

2026/10/14 13:31:30 阅读更多 →
电商AI搜索优化无效的原因及解决策略

电商AI搜索优化无效的原因及解决策略

引言在当前的电商环境中,AI搜索优化(AI Search Optimization, AISO)已成为提升用户体验和转化率的重要手段。然而,许多企业在实施AISO时遇到了效果不佳的问题。本文将探讨电商AI搜索优化无效的原因,并提出相应的解决策…

2026/10/14 13:31:30 阅读更多 →
心理学在员工激励和团队管理中的应用(总监ppt)

心理学在员工激励和团队管理中的应用(总监ppt)

将员工动机与团队协作研究转化为具体管理动作,覆盖目标设定、奖励认可、公平规则、心理安全、绩效反馈与冲突处理,并配套场景分析、效果评估和90天实施路线,适用于管理者培训、团队建设及人力资源管理交流。 表格解读一:员工激励机…

2026/10/14 13:31:30 阅读更多 →
Unity 2020+ Prefab光照烘焙失效原因与修复方案

Unity 2020+ Prefab光照烘焙失效原因与修复方案

1. 项目概述:为什么Prefab烘焙突然“不香了”?2020年前后,Unity3d开发者圈里频繁出现一个扎心现象:明明在Scene视图里光影效果完美,一打包成Build或切换到Game视图,模型突然变灰、阴影消失、Lightmap全黑—…

2026/10/14 13:30:30 阅读更多 →

日新闻

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/14 7:53:34 阅读更多 →