2.7 KiB
Additional Base Lib 附加基础库
用轻量级容器工具bubblewrap解决GNU/Linux操作系统中常见的glibc不兼容问题。(暂时只支持debian系)
概述
如果经常在GNU/Linux平台使用非系统软件源内的应用,很容易遇到这样的问题:
/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.xx' not found (required by /path/to/xxx)
这是因为程序编译时的使用的glibc高于运行时使用的版本。网上流传的解决方案通常是让你升级系统中的glibc,但是由于glibc是GNU/Linux系统中极其重要的组件,贸然行事很容易造成系统损坏。尽管确实有一些更合理的解决方法,但是他们都比较麻烦。而这个小工具简单快捷,方便安装,没有任何安全隐患。
许可
ablrun等脚本文件没有许可证限制。附带的glibc等动态库文件都是取自一些GNU/Linux发行版的,请遵守相应的许可。
注意事项
- 只在deepin测试过,但应该能在所有debian系发行版上运行。移植到其他发行版平台也很容易。
- 由于使用了bwrap容器环境,因此有些程序不能运行的,比如说在程序内部使用了容器技术或者需要挂载文件系统的程序就不行。appimage是例外,因为我专门设计了单独的方案去运行他。
- 在glibc之外还打包了一个libstdc++的动态库,因为这个问题也比较常见。
- 你可以在使用ablrun的同时使用LD_LIBRARY_PATH环境变量改变动态库寻找的位置,解决一些其他动态库问题。
用法
首先需要安装additional-base-lib的debian包(请在右侧发行版处下载):
sudo apt install "path/to/package_name.deb"
此后只需要在出现glibc问题的命令前面,加上ablrun和空格即可:
ablrun [命令 [运行选项 ...]]
卸载:
sudo apt remove additional-base-lib
其他资源
最初的发布页面:
https://bbs.deepin.org/post/256555
解决动态库问题的通用解决方法:
https://bbs.deepin.org/post/256081
想要移植程序到其他系统或平台的,可以参考:
https://bbs.deepin.org/post/258721
定制
如果这里发布的deb包不符合你的要求(库版本、架构),你可以使用make-deb.sh创造你自己的附加基础库。你需要将项目下载到本地,然后编辑这个脚本,把三个包的下载链接改成你想要的即可。你可以在debian的网站找到各种版本和架构的下载链接:https://www.debian.org/distrib/packages ,然后在当前目录中执行make-deb.sh即可。他会自动识别软件包的架构并采取相应方案。
需要依赖:bash, coreutils, dpkg, dpkg-dev, grep, wget, patchelf