是否可以基于 yum 或 rpm 在 Linux 上编译可移植的可执行文件?

Is it possible to compile a portable executible on Linux based on yum or rpm?

通常一个 rpm 依赖于许多其他包或库。这对于没有互联网接入的大规模部署来说并不容易。

因为 yum 可以自动解决依赖关系。是否可以构建可移植的可执行文件?这样我们就可以复制到其他机器上了OS.

构建没有运行时库依赖项的二进制文件的一般方法是将其构建为静态的,即。使用 gcc 的 -static 参数,它链接所需库的静态版本,以便它们包含在生成的可执行文件中。这不会捆绑任何数据文件依赖项或外部可执行文件(即 libexec 式助手),但更简单的应用程序通常不需要它们。

对于更复杂的需求(其中涉及数据文件,或者由于某种原因无法链接依赖链的元素),请考虑使用 AppImageKit -- which bundles an application and its dependency chain into a runnable ISO. See docs/links at PortableLinuxApps.org.


在这两种情况下,rpmyum 都与它无关。构建一个打包静态可执行文件的 RPM 当然是可能的,但这是一个改变规范文件的 %build 部分的问题,这样它将 -static 传递给 gcc,而不是做任何特定于 RPM 的事情。


顺便说一下——我们不一直使用静态库的原因令人信服!

  • 使用共享库意味着对库应用安全更新仅意味着替换库本身,而不是重新编译所有使用它的应用程序。
  • 使用共享库的内存效率更高,因为内存中库的单个共享副本可供多个应用程序使用。
  • 使用共享库意味着您的可执行文件不需要包含它们使用的所有库的完整副本,从而使它们更小。

如果您想要安装已知的 RPM 集合,yum 提供了一个 downloadonly 插件。有了它,您应该能够一次收集所有相关的 RPM,以便在断开连接的机器上安装您想要的东西。