# Additional Base Lib 附加基础库

用轻量级容器工具bubblewrap解决GNU/Linux操作系统中常见的glibc不兼容问题。

|因为一些原因我不能继续更新这个程序。可以阅读[这篇文章了解ABL的原理和设计细节](https://bbs.deepin.org/zh/post/282284)。|
|-|

#### 概述

如果经常在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发行版的,请遵守相应的许可。

#### 注意事项

1. 软件包可以安装在使用dpkg或rpm的发行版上。移植到其他发行版平台也很容易。
2. 大多数应用都能运行,但是一些需要权限的不可以。如果你发现了应该可以但实际上不能运行的应用,请向我报告。
3. 在glibc之外还打包了一个libstdc++的动态库,因为这个问题也比较常见。
4. 这个脚本只关注解决glibc的兼容问题,因此很多时候你还需要解决一些其他的动态库问题才能让应用运行。你可以在使用ablrun的同时使用`LD_LIBRARY_PATH`环境变量改变动态库寻找的位置,解决一些其他动态库问题。

#### 用法

首先需要安装additional-base-lib的软件包,可以在右侧发行版处下载。  
如果你使用的是debian衍生版,使用这个命令安装:  
`sudo apt install "path/to/package_name.deb"`  
基于rpm的发行版,请使用相应的包管理命令。

此后只需要在出现glibc问题的命令前面,加上ablrun和空格即可:  
`ablrun [命令 [运行选项 ...]]`

卸载也需要通过系统的包管理器。  
如果使用的是debian衍生版,使用这个命令卸载:  
`sudo apt remove additional-base-lib`  
基于rpm的发行版,请使用相应的包管理命令。

#### 其他资源

最初的发布页面:  
https://bbs.deepin.org/post/256555

解决动态库问题的通用解决方法:  
https://bbs.deepin.org/post/256081

#### 定制
如果这里发布的deb包不符合你的要求(库版本、架构),你可以使用`make-deb.sh`创造你自己的附加基础库。你需要将项目下载到本地,然后编辑这个脚本,把三个包的下载链接改成你想要的即可。你可以在debian的网站找到各种版本和架构的下载链接:https://www.debian.org/distrib/packages ,然后在当前目录中执行`make-deb.sh`即可。他会自动识别软件包的架构并采取相应方案。  
在这之前,你需要安装以下软件包:bash, coreutils, dpkg, dpkg-dev, grep, wget, patchelf

对于rpm包,你可以使用`make-rpm.sh`,你需要将项目下载到本地,然后编辑这个脚本,把三个包的下载链接改成你想要的即可。你可以在fedora的网站找到各种版本和架构的下载链接:https://packages.fedoraproject.org/ ,然后在当前目录中执行`make-rpm.sh`即可。他会自动识别软件包的架构并采取相应方案。rpm包会存储在`~/rpmbuild/RPMS`中。  
在这之前,你需要安装以下软件包:bash, coreutils, rpm-build, wget, patchelf