在不同的发行版上执行AppImage时找不到c-GLIBC版本



我目前正在开发一个应用程序,我想将其发布到许多发行版。到目前为止,我已经一次在一个发行版上完成了所有的测试(在同一发行版上编译和运行(。但是,当我在主计算机(Arch Linux(上从编译中获取输出的AppImage,并尝试在vm(Ubuntu 20.04(中运行它时,它会给我以下错误:

gabriel@gabriel-VirtualBox:~/Downloads$ ./Neptune.Installer-x86_64.AppImage ./Neptune.Installer-x86_64.AppImage: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./Neptune.Installer-x86_64.AppImage)

对此有什么可能的解决方案?我已经考虑过静态链接库,但我不确定这是否会导致许可问题,因为我的程序不是开源的。除此之外,我可能会考虑在一个非常旧的发行版上编译我的程序,比如Ubuntu12或其他版本,但我不知道它能在多大程度上移植到其他发行版(例如,我的程序还能在旧版本的Fedora上运行吗?(

这可能是一个复杂的问题,但我只想知道解决这个问题的最佳方法是什么。更改库?静态链接?在旧发行版上编译?让我知道你的想法。

我曾考虑过静态链接库,但我不确定这是否会导致许可问题,

是。

非常旧的发行版,比如Ubuntu12之类的,但我不知道它能在多大程度上移植到其他发行版

它没有(alpine-linux(。如果编译软件,则必须使用编译软件所依据的库集来运行软件。即使您在";非常旧的分布";可能会有变化。

发布到许多发行版

选择要支持的发行版和这些发行版的版本列表。告诉用户您将支持这些分发版本。(https://partner.steamgames.com/doc/store/application/platforms->Steam only officially supports Ubuntu running Ubuntu 12.04 LTS or newer..(。

针对分发+版本的每个组合单独编译,并针对每个此类分发版本单独分发您的软件。为了方便用户,可以为特定的分发包管理器创建包存储库并与软件共享。在…上https://www.zabbix.com/download只有这么多组合可供选择。对docker虚拟化环境中的CI/CD感兴趣。我喜欢gitlab。

或者将应用程序与所有依赖的共享库一起分发。将其与操作系统捆绑在一起,并以docker映像或qemu/virtualbox虚拟映像的形式分发。或者只使用共享库分发带有LD_PRELOAD包装器的文件。就像蒸汽一样。在您的系统上安装steam,看看~/.steam/steam/ubuntu12_64中会发生什么。

并雇佣一个层来解决许可问题。

最新更新