【问题标题】:Is it possible to compile a portable executible on Linux based on yum or rpm?是否可以基于 yum 或 rpm 在 Linux 上编译可移植的可执行文件?
【发布时间】:2015-11-08 18:48:18
【问题描述】:

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

由于 yum 可以自动解决依赖关系。是否可以构建可移植的可执行文件?以便我们可以将其复制到具有相同操作系统的其他机器上。

【问题讨论】:

  • 你想要的词是“静态的”——而 yum 或 rpm 并没有真正改变这种情况。

标签: linux centos rpm yum rpmbuild


【解决方案1】:

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

【讨论】:

  • 嘿。不是对这个问题的字面回答,但似乎确实是 OP 需要的,而不是他们所要求的。 :)
  • 这不是这个网站的一半挑战吗? ;)
【解决方案2】:

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

对于更复杂的需求(涉及数据文件,或由于某种原因无法链接依赖链的元素),请考虑使用AppImageKit——它将应用程序及其依赖链捆绑到一个可运行的 ISO。请参阅文档/链接at PortableLinuxApps.org


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


顺便说一下,我们不总是使用静态库有令人信服的理由!

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

【讨论】:

    猜你喜欢
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 2015-11-20
    • 2019-12-05
    • 2014-09-19
    相关资源
    最近更新 更多