关于分发 Linux 应用程序的愚蠢问题。我知道我们有 Flatpak 可以做到这一点,但我很好奇。
假设您正在创建一个依赖于某些动态依赖项的 GUI 应用程序。据我了解,Flatpak 会将这些依赖项包含在您的应用程序映像中,以便它们与系统可用的依赖项分开。
deb
此外,像和这样的打包格式rpm
将触发包管理器下载缺少的共享库。
也就是说,您可以将可执行文件与动态库(包含在tar.gz
人们下载的存档中)一起分发吗?
/myapp.tar.gz
/bin
myapp
/lib
libssl3.so
qt5
那么人们是否可以将其解压到某个地方并运行可执行文件,而无需包管理器或容器解决方案?
从字面上看
curl -L --url https://.../linux-amd64.tar.gz | tar -xvzf - -C $HOME/.local/myapp
$HOME/.local/myapp/bin/myapp
也许可执行文件可以首先使用系统提供的依赖项,如果不存在则使用本地依赖项?
这种方法有效吗?
如果它确实有效,为什么开发人员不这样做,而是通过多种包格式进行分发?
以这种方式分发库是否违反了 OSS 许可条款?
答案1
你绝对可以这样做,但要成功启动应用程序,ld-linux
就需要找到库。
这可能很简单,只需提供一个启动器脚本来设置 LD_SEARCH_PATH 以包含文件所在的目录,或设置 LD_PRELOAD 来强制加载它们。
可以通过将目录放在 LD_SEARCH_PATH 中的系统库目录之后来确定依赖项的顺序
因此$HOME/.local/myapp/bin/myapp
被替换为sh
设置一些变量的脚本文件,exec
然后 $HOME/.local/myapp/bin/myapp.bin
$HOME/.local/myapp/lib/myapp.bin
阅读 ld-linux 的手册页以了解更多信息。
许可,您需要阅读许可证,但大多数图书馆许可证都允许这样做。