Graphviz设置节点形状为box时触发Illegal instruction报错如何解决
问题原因
- 你使用的Graphviz 2.44.0版本存在已知兼容bug:当同时使用全局默认节点shape配置
node [shape="box"]和xdot输出格式时,底层依赖的pango/cairo绘制链路会触发异常逻辑,抛出非法指令错误。默认椭圆节点的绘制逻辑未触发该bug,因此删除配置行后可以正常运行。 - 硬件指令集不兼容:你当前运行环境的CPU不支持Graphviz二进制包编译时启用的优化指令集,box形状的绘制逻辑刚好调用了这部分不兼容的指令代码,因此触发报错。
解决方法
- 更换Graphviz版本:升级到2.46.0及以上稳定版,或降级到2.42.x稳定版,这两个版本区间均不存在该box形状与xdot输出的兼容bug。
- 调整dot文件写法:如果不想更换版本,可以放弃全局节点形状配置,改为给每个节点单独指定shape属性,示例如下:
digraph Blah { rankdir="LR" A [shape="box"]; B [shape="box"]; C [shape="box"]; D [shape="box"]; A -> B -> C; B -> D; }
该写法不会触发2.44.0版本的异常逻辑。
- 绕开问题渲染链路:如果必须使用2.44.0版本,可先输出为dot、svg等其他格式,再用第三方工具转成xdot格式,避开有问题的渲染分支。
- 本地编译适配:如果是CPU指令集兼容导致的问题,可在当前运行机器上手动编译Graphviz,编译时关闭不必要的架构优化参数,适配当前CPU的指令集,从根源解决非法指令报错。
内容的提问来源于stack exchange,提问作者user16790133
相关产品推荐
相关产品推荐

