2015-08-15 74 views
-2

通常一个rpm依赖于许多其他软件包或库。这对于没有互联网访问的大规模部署并不容易。是否可以在Linux上基于yum或rpm编译可移植的可执行文件?

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

+2

你想要的字是“静态” - 而yum或rpm根本不会真的改变情况。 –

回答

1

如果你想安装一个已知的RPM集合,yum提供了一个downloadonly插件。因此,您应该能够一次性收集所有关联的RPM,以便在断开的机器上安装您想要的内容。

+0

嘿。这不是问题的字面解答,而是看起来是OP所需要的,而不是他们所要求的。 :) –

+0

这不是这个网站的一半挑战吗? ;) –

1

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

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


在这两种情况都不做rpmyum有什么关系呢。建立一个包含静态可执行文件的RPM当然是可能的,但这是一个改变spec文件的%build部分的问题,因此它将-static传递给gcc,而不是做任何特定于RPM的特定文件。


顺便说一句,有一些令人信服的理由说明为什么我们一直不使用静态库!

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