SpyGlass 依赖缺失报错:missing dependency 速查
更新时间:2026-10-23。FAQ 速查页,属于 EDA 工具排错系列。SpyGlass 的依赖缺失报错分两大形态:一类是 sg_shell 压根起不来(
error while loading shared libraries,本体装了但依赖库缺),另一类是跑起来了但中途报缺东西(库路径没带、设计单元没编进来、规则集没安装)。共同点是报错信息里都直接写着缺什么——关键是看懂它缺的是「系统层的库」还是「工程层的依赖」。同思路的工具侧排查见 PrimeTime 依赖缺失报错;语法类报错见 SpyGlass 语法解析错误,版本错配问题见 SpyGlass 版本不兼容。
本文要回答的问题
- sg_shell 启动就报 error while loading shared libraries,libxxx.so 找不到,装包时装漏了什么?
- 在 CentOS 7 上跑要求 EL8 的构建,报 glibc 符号缺失,除了换系统还有救吗?
- filelist 里的
-y库路径漏配,模块报 cannot find design unit,和真缺库怎么区分? - waiver 或规则集报 rule set not installed,GuideWare/STARC 规则包是单独装的吗?
- GUI 组件起不来报 Java/Tcl 运行时版本不够,headless 模式能绕开吗?
一、报错原文与现象
sg_shell: error while loading shared libraries: libncursesw.so.5: cannot open shared object file: No such file or directory
sg_shell: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by sg_shell)
Error: Cannot find design unit 'fifo_sync' in library 'work'. Check search path and library mapping. (ELAB-XXX)
Error: Rule set 'GuideWare-2025.06' is not installed on this host; check SPYGLASS_RULE_PATH. (RULE-XXX)
Warning: Java runtime 1.8 detected; SpyGlass GUI requires 11 or later. GUI disabled.五种形态对应五条线:系统动态库缺失、glibc 符号版本不够、设计库路径没带、规则集选配未装、Java/Tcl 运行时太旧。判别方法很直接:报错在 sg_shell 进程起来之前(命令行直接吐错)的是系统层问题,在 elaborate/rule 阶段的是工程层问题。
二、可能原因总览
| 报错现象 | 可能原因 | 处置 |
|---|---|---|
| error while loading shared libraries | 只装了本体没装依赖包 | ldd 列缺库后补装对应 rpm/deb |
| GLIBC 符号 not found | OS 太老跑新版构建 | 换匹配 OS 的构建或升级系统 |
| libxxx.so.5 找不到但 .so.6 在 | 老版兼容包没装 | 装 compat 兼容包 |
| cannot find design unit | -y/-v 库路径漏配 | 补 filelist 库搜索路径 |
| design unit 在库里仍报缺 | 库未先编进 work | 调整编译顺序先编库 |
| rule set not installed | 规则包是选配未安装 | 补装规则包并设 RULE_PATH |
| GUI 起不来 Java 太旧 | 运行时版本不达标 | 装新版 JRE 或走批处理模式 |
三、逐条排查展开
动态库缺失用 ldd 一把列全。 先说这类问题的典型来历:管理员照着安装向导把本体解开、配好 license,试跑时 sg_shell 直接拒起——因为安装程序从不替你装系统依赖,它假定目标机器是「标准发行版 + 常用库齐全」。sg_shell 启动报 error while loading shared libraries 时,不要一个一个试——直接 ldd $(which sg_shell) | grep "not found" 把所有缺的库一次列出来。EDA 安装包通常只带本体,系统依赖(libncurses、libXext、libpng 这类)假定目标机器已有。缺哪个补哪个:RHEL/CentOS 系用 yum provides */libncursesw.so.5 反查包名再装,Debian 系用 apt-file search。特别注意版本尾号:报缺 .so.5 而系统里是 .so.6,不是装错,是要补装 compat- 开头的老版兼容包。
glibc 符号缺失基本等于系统太老。 报 version 'GLIBC_2.28' not found 意思是这个 sg_shell 二进制是在 glibc 2.28 的系统上构建的,而当前机器(比如 CentOS 7,glibc 只有 2.17)没有那个符号。EDA 厂商的安装包页面会标注「built for EL8」这类字样——先核对下载的构建与目标 OS 是否匹配。处置只有三条路:换与 OS 匹配的旧版构建、升级 OS、或在容器/新机器上跑。不要尝试自己装新 glibc 替换系统的——那会让整个系统挂掉。
cannot find design unit 先区分「库没带」还是「编译顺序错」。 elaborate 阶段报找不到某个模块,九成是 filelist 里的 -y <dir>(库搜索目录)或 -v <file>(库文件)漏配了那个 IP/工艺库的路径——SpyGlass 只在显式给出的搜索路径里找模块定义。对照综合或仿真用的 filelist,把缺的 -y 行补齐。另一种形态是库文件在 filelist 里、但排在引用它的模块之后:SpyGlass 按顺序编译,引用方先编、定义方后编就会报缺,把库文件移到前面或改用 -y 自动搜索即可。这类「引用存在但解析不到」的深入分支见 SpyGlass 未解析引用。
规则集报 not installed 是选配包没装。 GuideWare、STARC 这些规则包是独立于本体的选配安装件,装好本体不等于有规则。先 ls $SPYGLASS_HOME/aux/rules/(或发行说明里给的规则目录)确认本机实际装了哪些规则集;没有就找安装介质补装对应规则包,装完把 SPYGLASS_RULE_PATH 指到规则目录。团队共用工程时把「本工程依赖的规则集清单」写进 README,换机器先核对清单再跑。
Java/Tcl 运行时只影响 GUI,不影响批处理。 报 Java 版本不够时,sg_shell 的批处理模式(-batch)通常照常可用,只是 GUI 起不来。应急先用批处理把活跑完,再按发行说明装对应版本的 JRE。Tcl 版本问题同理: sg_shell 自带 Tcl 解释器时不受影响,依赖系统 Tcl 的组件才需要升级。
颜色按语义分角色:红是报错入口,蓝是排查动作,橙是修复,紫是收尾防复发。主线是「先按报错阶段分两叉:进程起不来走系统层,运行中途报缺走工程层」——系统层用 ldd 列缺库补装、glibc 不对就换构建;工程层补 -y/-v 库路径、核对规则集安装清单;四条修复线共用出口:把依赖清单建成档案。
四、预防与纪律
- 装机清单即依赖清单:新机器装 SpyGlass 时跑一遍
ldd把全部依赖包名记进装机文档,下回照单装。 - 构建与 OS 对表:下载页「built for EL8」这类标注抄进版本矩阵,机器 OS 升级前先看工具构建是否还支持。
- filelist 库路径集中管理:
-y/-v路径写在一个公共 include 文件里,加库只改一处,杜绝各人 filelist 各自漏。 - 规则集清单随工程走:README 里写明依赖的规则集与版本,CI 起跑前先核对
$SPYGLASS_RULE_PATH下实际存在。 - GUI 依赖与批处理解耦:服务器跑批统一
-batch,Java/Tcl 版本问题不阻塞回归。
这一篇在知识体系里的位置
本篇是 EDA 排错速查簇中「依赖缺失」节点的 SpyGlass FAQ 页,与 PrimeTime 依赖缺失报错 同族;模块引用解析的深入分支见 SpyGlass 未解析引用,版本与构建错配见 SpyGlass 版本不兼容,语法类报错见 SpyGlass 语法解析错误。
一句话总结
SpyGlass 依赖缺失报错先按报错阶段分两条主线:进程起不来是系统层——ldd 列全缺的动态库反查包名补装(注意 .so.5/.so.6 尾号对应 compat 兼容包)、glibc 符号缺失就换与 OS 匹配的构建或升级系统;运行中途报缺是工程层——cannot find design unit 就补齐 filelist 的 -y/-v 库路径并调整编译顺序,rule set not installed 就补装规则包并设置 SPYGLASS_RULE_PATH,Java/Tcl 太旧先用 -batch 绕开;最后靠「装机依赖清单 + 构建 OS 对表 + 库路径集中管理 + 规则集清单随工程」把缺依赖挡在装机和接工程之前。