是否可以基于yum或rpm在Linux上编译可移植可执行文件?
通常一个rpm依赖于许多其他包或LIB。这对于没有互联网接入的大规模部署来说并不容易是否可以基于yum或rpm在Linux上编译可移植可执行文件?,linux,centos,rpm,yum,rpmbuild,Linux,Centos,Rpm,Yum,Rpmbuild,通常一个rpm依赖于许多其他包或LIB。这对于没有互联网接入的大规模部署来说并不容易 因为yum可以自动解析依赖项。是否可以构建一个可移植的可执行文件?因此,我们可以将其复制到具有相同操作系统的其他计算机。构建二进制文件而不依赖运行时库的一般方法是将其构建为静态的,即使用gcc的-static参数,该参数链接所需库的静态版本,以便它们包含在生成的可执行文件中。这不会捆绑在任何数据文件依赖项或外部可执行文件(即libexec样式的帮助程序)中,但更简单的应用程序通常不需要它们 对于更复杂的需求(涉
因为yum可以自动解析依赖项。是否可以构建一个可移植的可执行文件?因此,我们可以将其复制到具有相同操作系统的其他计算机。构建二进制文件而不依赖运行时库的一般方法是将其构建为静态的,即使用gcc的
-static
参数,该参数链接所需库的静态版本,以便它们包含在生成的可执行文件中。这不会捆绑在任何数据文件依赖项或外部可执行文件(即libexec
样式的帮助程序)中,但更简单的应用程序通常不需要它们
<>对于更复杂的需求(涉及数据文件或依赖链的元素不能因某种原因而链接),请考虑使用——它将应用程序及其依赖链捆绑成可运行的ISO。请参阅文档/链接
在这两种情况下,
rpm
或yum
都与此无关。当然,构建一个打包静态可执行文件的RPM是可能的,但这只是更改spec文件的%build
部分,使其将-static
传递给gcc,而不是执行任何特定于RPM的操作
顺便说一句,我们为什么不一直使用静态库,有很多令人信服的原因
- 使用共享库意味着对库应用安全更新只意味着替换库本身,而不是重新编译使用它的所有应用程序
- 使用共享库更节省内存,因为内存中库的单个共享副本可供多个应用程序使用
- 使用共享库意味着您的可执行文件不需要包含它们使用的所有库的完整副本,从而使它们更小
yum
提供了一个插件。这样,您就可以一次收集所有关联的rpm,以便在断开连接的机器上安装所需的设备。您需要的单词是“静态”——而yum或rpm根本不会改变这种情况。嘿嘿。不是对问题的字面回答,但似乎是OP需要的,而不是他们要求的。:)这不是这个网站的一半挑战吗?;)