[Feelings & Sharing] 【水】又做了个解决glibc版本问题的小工具
Tofloor
poster avatar
enforcee
deepin
2023-05-16 03:28
Author

第七版现在推出了,这回大家可以去gitee下载。之后大概不会在这个帖子继续更新了。
https://gitee.com/deepin-community-store/additional-base-lib
但是如果大家有问题的话,还是可以在帖子下面留言。


第六版现在可以自动检测appimage了,取消了ablimage,现在可以使用ablrun直接运行appimage和其他可执行文件。另外优化了一点appimage的运行方法。链接已经换成新版的了,请在下面下载。


第五版现在可以运行appimage程序,请使用专用的命令来运行: ablimage 文件名


第四版修复了运行选项中有空格时不能正确传递的问题,并且防止了bash的持续运行(能节约一点内存?)。另外写了一点描述,现在只运行 ablrun 不加选项可以看到。


第三版修复了误添加当前文件夹到动态库寻找路径的问题,并且额外打包了新版glibc的ldd脚本,现在可以使用 ablrun ldd [文件名] 来查看依赖解决情况了。


第二版现已推出,修正了脚本中不能传递程序运行选项的问题。库文件还是原来的,没有改动。


隆重推出additional base lib(我也不知道叫啥好了),内置glibc和libstdc++,简单可靠,五秒部署,纯正原味,没有风险(以上纯属胡言乱语)

joy

其实原理还是我们最爱的bwrap,创建一个容器把libc和ld.so替换掉,就这么简单(bwrap真是为大家节约了不少生命)。此外用了一点小技巧让大家仍然可以自己

设置LD_LIBRARY_PATH变量来寻找自己安装的动态库。选用的glibc和libstdc++是从debian bookworm(debian 12,目前是测试版)上下载的,支持到GLIBC_2.36、GLIBCXX_3.4.30。

安装:下载解压得到deb包,打开终端,输入 sudo apt install ,输入空格后在文件管理器里用鼠标按住deb包拖拽过去,然后按回车。

使用:安装好了后,在终端运行不兼容的软件时,只需要在前面加上ablrun和空格就可以了。ablrun [命令]

删除:sudo apt remove additional-base-lib

注意事项:

1、只支持amd64(x86_64)

2、所有gcc库中我只加入了libstdc++(毕竟比较常用)。如果需要其他比如objective-c,fortran,d等语言的标准库,可以留言

3、应该能在其他基于debian的发行版上运行,但是我还没测试

4、由于包括的库比较少,只能解决部分兼容问题。但是通过学习,大家能解决所有常见问题。(可以看我之前的帖子:https://bbs.deepin.org/post/256081)

5、不能保证程序没有故障,各位需要为自己系统的安全负责

图片.png

下载:

additional-base-lib-2.36-9-6.deb.zip

Reply Favorite View the author
Comments
poster avatar
俺最萌
2023-05-16 03:37
收藏了
All Replies
1 / 2
To page
gfdgd_xi
Moderator
2023-05-16 03:31
#1

强啊

like

Reply View the author
neko
Moderator
2023-05-16 03:34
#2

好活!

Reply View the author
enforcee
deepin
2023-05-16 03:37
#3
gfdgd_xi

强啊

like

全是bwrap的功劳,写代码还没打包用功多

blush

Reply View the author
阿尼樱奈奈
Moderator
2023-05-16 03:37
#4

like

Reply View the author
jjcui8595
Moderator
2023-05-16 03:46
#5

大赞

Reply View the author
青稚°
Moderator
2023-05-16 03:48
#6

这不属于水贴,请修改成经验分享,请找板块论坛版主或者官方运营人员,看看能否加精。

like

Reply View the author
enforcee
deepin
2023-05-16 03:49
#7
青稚°

这不属于水贴,请修改成经验分享,请找板块论坛版主或者官方运营人员,看看能否加精。

like

略略略,就是水帖

blush

Reply View the author
青稚°
Moderator
2023-05-16 03:50
#8
enforcee

略略略,就是水帖

blush

水贴啊,那本版主就要给你禁言了(玩笑)。blush

Reply View the author
TSAC
deepin
2023-05-16 03:50
#9

水贴,水出了新高度
joy

Reply View the author
阿尼樱奈奈
Moderator
2023-05-16 04:09
#10
It has been deleted!
xiaoke2008
deepin
2023-05-16 04:46
#11

这是啥工具,看不懂

Reply View the author
阿尼亚
deepin
2023-05-16 04:51
#12
青稚°

水贴啊,那本版主就要给你禁言了(玩笑)。blush

你不怕这个版主给你禁言?joy

Reply View the author
谢克辉
deepin beta test group
2023-05-16 05:16
#13
阿尼亚

你不怕这个版主给你禁言?joy

相互禁言joy

Reply View the author
enforcee
deepin
2023-05-16 05:19
#14
xiaoke2008

这是啥工具,看不懂

用来解决一个有点困扰的兼容性问题。如果总是装一些外来应用的话可能会遇到。如果不曾遇到的话就恭喜,不过假如以后遇到的话,一定记得,不要乱动系统文件。数不胜数的系统由于使用了错误的方法升级glibc而覆灭,很多老鸟都曾在这个问题上折戟沉沙。

Reply View the author
Amber
deepin
2023-05-16 06:36
#15
enforcee

略略略,就是水帖

blush

这波叫做,精华到极致就是水joy

Reply View the author
青稚°
Moderator
2023-05-16 17:34
#16
谢克辉

相互禁言joy

版主给版主禁言,可以自己解开。

Reply View the author
神末shenmo
Moderator
Spark-App
2023-05-16 21:01
#17

投一个到星火商店吧

这个东西完全可以扩展一下集成到商店啊

Reply View the author
神末shenmo
Moderator
Spark-App
2023-05-16 22:07
#18

可以在后续版本中加入对desktop文件的解析

这里是摘抄自一段prime-run的代码

if [ "${FILE##*.}"x = "desktop"x ]
then
    __NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only __GLX_VENDOR_LIBRARY_NAME=nvidia $(cat $FILE | grep "Exec=" | sed "s/^Exec=//" | sed "s/%.//" | sed "s/^\"//g" | sed "s/\" *$//g" | head -n 1)
else
    __NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only __GLX_VENDOR_LIBRARY_NAME=nvidia $FILE
fi
Reply View the author
神末shenmo
Moderator
Spark-App
2023-05-16 22:23
#19

可否加入星火计划的开发,作为一个兼容性解决方案推出呢?整合到商店工具中,或者作为一个依赖加入仓库

感觉这个东西弄全一点可以做成一整个容器,以后做到让星火的软件都在容器中安装运行,这不就完全解决了依赖问题了嘛

Reply View the author
enforcee
deepin
2023-05-16 22:47
#20
神末shenmo

可否加入星火计划的开发,作为一个兼容性解决方案推出呢?整合到商店工具中,或者作为一个依赖加入仓库

感觉这个东西弄全一点可以做成一整个容器,以后做到让星火的软件都在容器中安装运行,这不就完全解决了依赖问题了嘛

就一行命令的内容,也没什么许可证的限制,随便用吧。内置的库文件也都是下载debian的,我没做任何修改。

其实我也清楚单靠堆库并不能完全解决兼容的问题,就算是在deepin上再叠一个debian一个ubuntu一个fedora一个arch,也还是会有东西运行不了。自带依赖的AppImage出问题的也不少,有少打包了库的,有自带的库和系统的库不兼容的,最后还是要手动解决。提高打包的质量才是关键。

隔壁flatpak的话是在软件的构建阶段就把能使用的依赖库以运行时和sdk的方式固定了,所以flatpak就不容易遇到兼容问题。AppImage和传统的包管理器就必须打包人员把关。

Reply View the author
1 / 2
To page