Ubuntu 18.04/20.04启动Flutter应用提示GLIBC版本缺失求解决
Flutter应用在Ubuntu 18.04/20.04启动时缺失GLIBC版本的问题解决
问题背景
我在Linux Mint 21.2上构建了Flutter发布版应用,该应用可在Ubuntu 22.04正常运行,但在Ubuntu 18.04和20.04系统中启动时出现GLIBC版本缺失错误,具体错误信息如下:
./dkc: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./dkc) ./dkc: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /home/alex/Рабочий стол/Linux release 20231207/lib/libsqlite3_flutter_libs_plugin.so) ./dkc: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by /home/alex/Рабочий стол/Linux release 20231207/lib/libsqlite3_flutter_libs_plugin.so) ./dkc: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /home/alex/Рабочий стол/Linux release 20231207/lib/libsqlite3_flutter_libs_plugin.so) ./dkc: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /home/alex/Рабочий стол/Linux release 20231207/lib/libsqlite3_flutter_libs_plugin.so)
我的pubspec.yaml依赖配置如下:
environment: sdk: ">=3.0.5 <4.0.0" dependencies: flutter: sdk: flutter connectivity_plus: ^5.0.2 cupertino_icons: ^1.0.6 darq: ^2.0.0 device_info_plus: ^9.1.1 dio: ^5.4.0 docx_template: ^0.4.0 drift: ^2.14.1 dropdown_button2: ^2.3.9 excel: ^4.0.0 file_picker: ^6.1.1 flutter_window_close: ^1.0.0 get: ^4.6.6 intl: ^0.19.0 package_info_plus: ^5.0.1 package_rename: ^1.5.0 path: ^1.8.3 path_provider: ^2.1.1 pdf: ^3.10.6 printing: ^5.11.1 sqlite3_flutter_libs: ^0.5.18 dev_dependencies: flutter_test: sdk: flutter build_runner: ^2.4.7 drift_dev: ^2.14.1 flutter_launcher_icons: ^0.13.1 flutter_lints: ^3.0.1
Ubuntu 18.04中执行apt policy libc6的结果如下:
apt policy libc6 libc6: Установлен: 2.27-3ubuntu1.6 Кандидат: 2.27-3ubuntu1.6 Таблица версий: *** 2.27-3ubuntu1.6 500 500 http://ru.archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages 100 /var/lib/dpkg/status 2.27-3ubuntu1.5 500 500 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages 2.27-3ubuntu1 500 500 http://ru.archive.ubuntu.com/ubuntu bionic/main amd64 Packages
我尝试更新libc6但未找到可用的新版本,也参考了相关教程但问题仍未解决,请问该如何解决这些错误?
解决方案
1. 在目标最低版本系统上构建(最可靠)
GLIBC的版本依赖是编译时绑定的,在Ubuntu 18.04(或兼容的旧版本系统)上构建应用,编译出的二进制会自动链接到该系统的GLIBC版本,自然能在Ubuntu 18.04、20.04、22.04上运行。
如果不想在物理机安装旧系统,可以用Docker容器实现:
# 拉取Ubuntu 18.04镜像 docker pull ubuntu:18.04 # 启动交互式容器,挂载本地应用目录到容器内 docker run -it -v /本地应用目录:/app ubuntu:18.04 /bin/bash # 在容器内安装Flutter构建所需依赖 apt update && apt install -y git curl clang cmake ninja-build pkg-config libgtk-3-dev # 安装Flutter稳定版并配置环境变量 git clone https://github.com/flutter/flutter.git -b stable export PATH="$PATH:/flutter/bin" # 进入应用目录构建发布版 cd /app flutter build linux --release
2. 降级高依赖版本的库
错误日志显示libsqlite3_flutter_libs_plugin.so是主要的高版本GLIBC需求来源,尝试降级sqlite3_flutter_libs到更早的版本:
- 修改pubspec.yaml中的
sqlite3_flutter_libs版本为^0.5.10(或更早的稳定版),执行flutter pub get后重新构建应用; - 可查看该库的版本历史,选择明确兼容旧GLIBC的版本。
3. 尝试静态编译
Flutter Linux应用默认是动态链接,尝试启用静态编译(注意并非所有依赖都支持静态链接):
- 编辑
linux/CMakeLists.txt,在target_link_libraries配置中添加-static参数; - 或者尝试使用
flutter build linux --release --static命令(该参数需Flutter 3.10+版本支持,需测试兼容性)。
4. 手动打包所需GLIBC库(临时方案,不推荐)
从Linux Mint 21.2系统中复制所需的高版本GLIBC库(libc.so.6、libm.so.6等)到应用的lib目录,运行时指定库加载路径:
LD_LIBRARY_PATH=./lib ./dkc
这种方法可能引发其他运行时兼容性问题,仅作为临时应急方案。
内容的提问来源于stack exchange,提问作者Alexander Vinogradov
相关产品推荐
相关产品推荐

