Calibre 依赖缺失:INCLUDE 文件/选件组件/共享库找不到速查
更新时间:2026-10-22。FAQ 速查页,属于 EDA 工具排错系列,总入口见 开源/EDA 工具报错排查总览。Calibre(Siemens EDA 的物理验证套件,DRC/LVS/PEX 三件套)不是一个自包含的二进制:它要读 PDK 下发的 SVRF rule deck 及其 INCLUDE 链,要调用安装目录下按选件分发的组件(PEX、DFM 等),运行时还要链接一批系统 compat 共享库,hook 脚本里又可能嵌着 perl/python。「Calibre 依赖缺失」指的就是这条链上某个文件或组件在磁盘上不存在、或存在但路径没被指到。它与纯授权失败要区分开:license 不足时文件都在、只是取不出来(见 Calibre license 取不出来);本篇处理的是文件/组件本身不存在。命令根本起不来见 Calibre 命令找不到,验证流程全貌见 Calibre 物理验证实操。
本文要回答的问题
- rule deck 报 INCLUDE 文件找不到,是 kit 没装全还是相对路径随工作目录漂移?
- 启动 PEX 提示组件 not licensed/installed,怎么判断是缺选件文件还是缺 license?
ldd输出libXp.so.6 => not found意味着什么,该谁来装?- hook 脚本报 perl/python 找不到,属于 Calibre 的问题还是系统环境问题?
- layermap、techfile 这类随 kit 分发的数据文件缺失,为什么重装 Calibre 没有用?
一、报错原文与现象
依赖缺失的文案按断点分四类。第一类断在 rule deck 读入阶段,SVRF 的 INCLUDE 指不到文件:
***** ERROR: Cannot open include file "include/stack_rules.svrf".
***** ERROR: Included file "techfile/layer_map.table" was not found.第二类断在启动或选件入口,安装目录下缺组件,措辞通常同时带 installed/licensed 两个词:
% calibre -pex runset.pex
***** ERROR: Component "calibre.xrc" is not installed or not licensed.
% $MGC_HOME/bin/calibre.dfm
Error: Cannot find executable calibre.dfm under MGC_HOME.第三类是动态链接器的文案,Calibre 主程序或组件启动即失败:
% ldd $MGC_HOME/bin/calibre.exe | grep -i "not found"
libXp.so.6 => not found
libpng12.so.0 => not found
% calibre -drc runset.drc
calibre.exe: error while loading shared libraries: libXp.so.6: cannot open shared object file第四类断在 runset/hook 调外部解释器或引用数据文件时:
/bin/bash: perl: command not found
python: command not found # hook 脚本要求的版本不在 PATH
***** ERROR: Layer mapping file "$PDK_DIR/calibre/layermap/gdsout.map" does not exist.第一条判据:报错里出现的是文件路径,先分清这个文件本该归谁提供——include/、techfile/、layermap 归 PDK kit,calibre.xrc 归 Calibre 安装选件,libXp 归操作系统 compat 包,perl/python 归系统环境。归错类就会白忙:缺 kit 文件时重装十遍 Calibre 也不会出现那个文件。
二、病因处置速查表
| 报错线索 | 缺的依赖 | 来源 | 处置 |
|---|---|---|---|
| Cannot open include file(deck 同目录 include/) | SVRF INCLUDE 链文件 | PDK kit | 核对 kit 安装完整性,路径改绝对或锚定 deck 目录 |
| Included file 随工作目录变化时隐时现 | 相对路径基准漂移 | runset 写法 | 固定 work 目录或用 kit 根变量拼绝对路径 |
| calibre.xrc not installed or not licensed | PEX 选件组件缺失 | Calibre 安装包 | 先 ls $MGC_HOME/pkgs 证实文件不存在再找管理员补装 |
| Cannot find executable calibre.dfm | DFM 等选件未安装 | Calibre 安装包 | 与 license 无关,补装对应选件包 |
| libXp.so.6 / libpng12 => not found | 系统 compat 共享库 | 操作系统 | 找管理员装 libXp/libpng12/elfutils 等 compat 包 |
| hook: perl/python command not found | 脚本解释器缺失或版本不符 | 系统环境 | 装解释器或在 hook 头部指明其绝对路径 |
| layermap/techfile does not exist | 工艺数据文件未指路径 | PDK kit | 设 PDK 根变量,runset 指向 kit 内 map 文件 |
| 同事机器能跑本机缺一片 | kit 拷贝不全或 MGC_HOME 指错 | 环境 | 与基线机对 ldd 输出和目录清单,固定两个根路径 |
表里第三条特别容易和 license 问题混淆:只有先在 $MGC_HOME/pkgs/ 下证实组件文件确实不存在,才能定性为安装缺失;文件在、签不出来,才走 Calibre license 取不出来。
三、排查决策路径
先读报错原文给缺的东西归类,再决定向谁要文件:
读图抓住颜色与分支:红色是入口现象,蓝色分诊按报错原文把缺失物送进三个抽屉——deck 数据文件、选件组件、系统库与解释器,三者来源不同、补法不同;橙色是按来源修复,绿色是固定路径后重跑并与基线机对拍。顺序不要反:没归类就动手重装,最常见的结果是把 Calibre 重装一遍却发现缺的是 PDK kit 里的文件。
四、逐条排查展开
1. INCLUDE 文件:先验文件在不在,再验相对路径基准。 SVRF deck 顶层通常用 INCLUDE 挂一串同目录 include/ 下的规则片段,这些文件随 PDK kit 分发,不在 Calibre 安装目录里。第一个动作是按报错路径直接 ls:
ls -l /proj/demo/pdk/calibre/include/stack_rules.svrf
find /proj/demo/pdk -name "layer_map.table" 2>/dev/nullfind 全盘都搜不到,基本是 kit 没装全或拷贝时漏了目录,重新解包/同步 kit;文件在别处存在,则是路径问题。注意 SVRF INCLUDE 的相对路径基准是启动 calibre 时的工作目录,不是 deck 文件所在目录——同一份 runset 从不同目录提交,INCLUDE 时隐时现就是这个机理。稳妥做法是 runset 里用 kit 根变量拼绝对路径,并在回归脚本里先 cd 到固定 work 目录再启动。变量没展开时路径里会原样带着美元符号,这类启动配置问题见 Calibre 配置解析失败。
2. 选件组件:先证实文件不存在,再谈 license。 Calibre 的 PEX(寄生参数提取,组件名常见为 calibre.xrc)、DFM 等能力按选件分发包安装,落在 $MGC_HOME/pkgs/ 一类的目录下。报 not installed or not licensed 时,这条复合文案本身不区分两种病因,要自己切一刀:
ls "$MGC_HOME/pkgs/" | grep -i -E "xrc|dfm"
ls -l "$MGC_HOME/bin/calibre.xrc" 2>/dev/null组件文件不存在 = 安装不完整,找管理员补装对应选件包,重装 license 没有任何作用;文件在但启动报签出失败,才是授权问题,转 Calibre license 取不出来。还要确认 MGC_HOME 指向的确实是本次要用的安装根——一台机器多版本并存时,变量指到了只装了基础包的旧版本,是「别人能跑 PEX 我不能」的常见原因。
3. 共享库:用 ldd 让动态链接器自己报清单。 Calibre 是老牌 Linux 应用,依赖一批发行版默认不再预装的 compat 库(典型如 libXp.so.6、旧版 libpng、部分 elf 工具库)。不要逐个猜,直接对主程序和报错组件跑 ldd,让它一次列出所有缺失项:
ldd "$MGC_HOME/bin/calibre.exe" | grep -i "not found"输出的每一行都对应一个要补的系统包(包名随发行版不同,常见形态是 libXp、libpng12、elfutils-libelf 之类的 compat 包),由管理员从系统安装源补齐,不要从别的机器拷单个 .so 凑数——版本和依赖链对不上时会从「启动即失败」变成「跑到中段崩溃」。库补齐后 ldd 应无一行 not found,再启动 Calibre。
4. 脚本解释器与工艺数据文件:最容易误归给 Calibre 的两类。 runset 里挂的 hook(如 DRC RESULTS 后处理、网表转换)常调 perl/python;脚本报 command not found 时先 which perl python3、核对 hook 要求的版本,缺则装解释器,多版本则在 hook 脚本头部写死解释器绝对路径。这是系统环境问题,重装 Calibre 不会附带解释器。layermap、techfile(GDS/OASIS 层号与工艺层的映射表)同样随 kit 分发,报 does not exist 时去 kit 目录找并在 runset 里把 PDK 根变量指对——它和 INCLUDE 同源,处置也相同。
5. 与基线机对拍:换机失败的终板手段。 一台已知能跑的机器是最好的对照:两边各跑一次 ldd ... | grep not found,各列一份 kit 目录清单与 $MGC_HOME/pkgs/ 清单做差集,再 diff MGC_HOME 与 PDK 根两个环境变量。差异点即病因,比逐条猜测快得多。版本不匹配(deck 要求的 Calibre 版本高于本机)报的是另一类文案,见 Calibre 版本不匹配。
五、预防与纪律
- 两个根路径登记在册:Calibre 安装根(
MGC_HOME/CALIBRE_HOME)与 PDK kit 根写进组内环境脚本,runset 只用变量拼绝对路径,禁止隐式依赖当前工作目录。 - 新节点装完即体检:
ldd $MGC_HOME/bin/calibre.exe无 not found、pkgs/下选件齐全、kit 目录清单与基线机一致,三项过了再交付使用。 - kit 分发走整包校验:PDK kit 用 tar 包加校验和整包同步,不允许手工逐目录拷贝,防止 include/ 或 layermap 漏拷。
- 回归脚本前置断言:启动前检查 INCLUDE 链首文件、layermap、解释器是否就位,缺失时明确报「缺什么、找哪个来源」,把失败挡在 Calibre 启动前。
- 选件与 license 分开登记:装机清单记录已装选件包,授权清单记录已购 feature,排错时各查各的,不被 not installed or not licensed 的复合文案带偏。
这一篇在知识体系里的位置
本篇是 EDA 排错速查簇中「Calibre 运行环境」节点的 FAQ 页,与同簇各篇按失败阶段分工:命令本身不在 PATH 见 Calibre 命令找不到,启动后授权签出失败见 Calibre license 取不出来,runset/INCLUDE 语法与变量展开问题见 Calibre 配置解析失败,SVRF 语句本身的解析错见 Calibre 语法/解析报错,deck 与工具版本错位见 Calibre 版本不匹配。完整验证流程与 deck 结构背景见 Calibre 物理验证实操,全簇索引见 开源/EDA 工具报错排查总览。
一句话总结
Calibre 依赖缺失先读报错原文归类:deck 的 INCLUDE 与 layermap 缺失归 PDK kit、改绝对路径并固定 work 目录,calibre.xrc 等选件缺失先在 $MGC_HOME/pkgs/ 证实文件不存在再补装选件包(与 license 问题切清楚),libXp.so.6 这类共享库缺失用 ldd 列全清单后由系统 compat 包补齐,hook 的 perl/python 与工艺数据文件各归系统环境与 kit;换机失败时与基线机对拍 ldd 输出和目录清单,长期靠两个根路径登记、新节点装完体检与脚本前置断言守住一致性。