ubuntu小技巧30--23.10桌面版安装钉钉启动报错undefined symbol: FT_Get_Color_Glyph_Layer

ubuntu小技巧30--23.10桌面版安装钉钉启动报错undefined symbol: FT_Get_Color_Glyph_Layer

介绍

近期在电脑上安装了 ubuntu 23.10桌面版本, 安装最新版钉钉 7.1.0-Release.31017 后无法正常打开软件,报错 undefined symbol: FT_Get_Color_Glyph_Layer ,具体如下

xg@xghome:~/Desktop$ bash /opt/apps/com.alibabainc.dingtalk/files/Elevator.sh
ubuntu
ubuntu branch
preload_libs=
./com.alibabainc.dingtalk: symbol lookup error: /lib/x86_64-linux-gnu/libcairo.so.2: undefined symbol: FT_Get_Color_Glyph_Layer

在这里插入图片描述

解決方法

启动异常后,从钉钉的桌面快捷键中找到它启动脚本 /opt/apps/com.alibabainc.dingtalk/files/Elevator.sh
粗略看了下脚本,发现它会根据不同的系统和 libc等文件选择性预加载一些特定的库,因此猜测 ubuntu 23.10 新版本的库和老版本的库功能不一致导致。

进一步查看 22.04和23.10的 /lib/x86_64-linux-gnu/libcairo.so.2 , 发现 ubuntu22.04 版本对应 libcairo.so.2.11600.0 , 而ubuntu23.10对应libcairo.so.2.11800.0 ,因此考虑将22.04 的库文件放在钉钉预加载目录,让其使用22.04的库libcairo.so.2.11600.0 ,测试后发现可以正常跑起来。

步骤如下:

提前预装22.04桌面版系统,从 22.04 版本的机器上拷贝库文件到 7.1.0-Release.31017 目录,并新建好对应的软链接
sudo mv libcairo.so.2.11600.0 /opt/apps/com.alibabainc.dingtalk/files/7.1.0-Release.31017/
sudo ln -s libcairo.so.2.11600.0 libcairo.so.2
chmod 777 libcairo.so.2.11600.0

配置好之后就可以正常打开软件了
在这里插入图片描述

截至23023-11-16 钉钉更新了 7.1.0-Release.31113 版本(官方下载链接暂未更新),该版本已经修复这个bug了,有需要的小伙伴可以通过链接 https://dtapp-pub.dingtalk.com/dingtalk-desktop/xc_dingtalk_update/linux_deb/Release/com.alibabainc.dingtalk_7.1.0.31113_amd64.deb 下载最新版本规避该问题;
也可以通过上述方式让 7.1.0-Release.31017 正常运行,直接从钉钉应用中更新
在这里插入图片描述

cairo & freetype

报错起源于 libcairo, 那么我看看它究竟是干什么的?
Cairo是一个用C语言开发的2D图形库,支持多种输出设备,旨在在所有输出媒体上产生一致的输出。目前支持的输出目标包括: the X Window System (via both Xlib and XCB), Quartz, Win32, image buffers, PostScript, PDF, and SVG file output.
早在2005-08-24发布1.0.0版本,2018-10-19发布1.16.0版本,最近2023-09-23发布1.18.0版本。
cairo-1.17.8.tar.xz 及之后版本中可以找到FT_Get_Color_Glyph_Layer函数,主要用于 cairo相关初始化; 然而搜具体函数发现没有找到相关定义,根据头文件发现它引用了第三方库 Freetype 的接口。

freetype 又是干什么的呢?
FreeType是一个软件字体引擎,被设计成小,高效,高度可定制,便携,同时能够产生高质量的输出(字形图像)。它可以用于图形库、显示服务器、字体转换工具、文本图像生成工具以及许多其他产品。它提供了 ft_get_color_glyph_layer 函数用于迭代地检索与当前字形槽相关联的彩色字形层。
在这里插入图片描述

说明

系统版本: Ubuntu 23.10
钉钉版本: 7.1.0-Release.31017
cairo 官方文档
freetype 官方文档->ft2-layer_management.html