Ubuntu安装钉钉之后,钉钉启动报如下错误:
1 | preload_libs=./libgbm.so ./plugins/dtwebview/libcef.so |
主要解决两个问题一个是libgbm.so 不存在,二是dingtalk_dll.so 无法启用可执行栈。
1.libgbm.so 不存在
libgbm.so 是 Mesa 图形库的一部分,正常ubuntu默认已经安装,如果没有安装请执行:
1 | sudo apt install libgbm1 |
1 | 使用 ldconfig 查找 libgbm.so 所在位置 |
/usr/lib/x86_64-linux-gnu/libgbm.so 文件路径
修改钉钉启动文件上(/opt/apps/com.alibabainc.dingtalk/files/Elevator.sh)中
preload_libs=路径修改成/usr/lib/x86_64-linux-gnu/libgbm.so
2.dingtalk_dll.so 无法启用可执行栈
导致该错误可能的原因:
- 某些旧版或非标准编译的 .so 文件(如钉钉的 dingtalk_dll.so)可能标记了需要可执行栈(executable stack)。
- 但现代 Linux 系统出于安全考虑(NX/DEP 保护),默认禁止共享库使用可执行栈。
- 如果内核或安全策略(如 SELinux、PaX、grsecurity 或某些国产 OS 的加固策略)严格限制,就会报 Invalid argument。
ubuntu 25.04 之前版本可以使用execstack工具清除可执行栈标记,命令如下:
1 | sudo execstack -c /opt/apps/com.alibabainc.dingtalk/files/8.1.0-Release.6021101/dingtalk_dll.so |
ubuntu 25.04 之后版本使用patchelf,因为execstack已经不能直接使用,具体命令如下:
1 | # 1. 安装 patchelf |
管理窗口重新启动,即可解决相关问题!