【问题标题】:How to create static binaries (not linked, portable) of GNU find for Solaris 8,9,10 and AIX如何为 Solaris 8、9、10 和 AIX 创建 GNU find 的静态二进制文件(未链接、可移植)
【发布时间】:2011-12-17 13:43:09
【问题描述】:

我们(我的团队)正在寻找合适的方法将 GNU find 命令编译为静态(非动态链接)、可移植二进制文件(我可以从一个系统复制到另一个系统),适用于 Solaris 8、9 和 10 .

有没有人有一个很好的方法来实现这一点?

我们需要这个有几个原因,但其中一个事实是,出于政治和技术原因,我们不能只将其 pkgadd 到我们需要将其传输到的所有服务器中。这很复杂,但简而言之,我支持一个使用远程代理调用系统命令的应用程序(称为 BladeLogic Server Automation)。你可能已经看过我关于它的其他帖子,但是我们在 Solaris 上遇到了很多麻烦,因为它没有配备我们需要的选项 (-path)。 GNU 发现是,但我们不能在任何地方安装它(会太长,拥有服务器的客户可能会拒绝)。社区建议的其他选项都没有最终在每台服务器上 100% 的情况下工作。

虽然我们无法在没有客户批准的情况下安装任何东西(这实际上可能需要数周甚至数月的时间),但我们可以推送一个独立文件,执行它,然后在需要时将其删除。因此,如果我们可以为我们拥有的每个 Solaris 和 AIX 平台提供一个 find 二进制文件,我们就会很容易修复。

【问题讨论】:

    标签: compilation find solaris gnu aix


    【解决方案1】:

    在我看来 findutils 包除了 libc 之外没有其他依赖项,所以我不知道你想静态链接什么?我希望如果您在一台 Solaris 机器上构建 find 它应该适用于所有机器。您遇到了什么具体问题吗?

    【讨论】:

    • 好吧,在特定情况下,我尝试将查找二进制文件复制到的 solaris 区域中不存在所需的 libc 版本。这可能是在全局区域中链接它的问题,但我们不能在每个客户端服务器上都这样做(如上所述,未经客户端批准)。对我们来说最好和最简单的解决方案是能够简单地复制我们需要的查找二进制文件,而无需安装或链接任何依赖项(即使它只是一个库)。
    • libc 必须存在于您的区域中,否则不会运行任何程序。它是实现标准 c 头文件的库,在 Linux 上至少实现标准 posix 头文件。有可能 find 依赖于 Linux 的 libc 的某些功能在 Solaris 中不可用,这就是为什么我问你有没有尝试过,出了什么问题?
    【解决方案2】:

    就 Solaris 而言,只需在 Solaris 8 中编译,二进制文件将适用于 8、9 和 10。您不应该与静态 C 库链接,这不利于可移植性,而不是相反。静态 libc 甚至不是 Solaris 10 的一部分。

    【讨论】:

    • 好吧,我实际上对编译有点陌生,我想我对静态链接的含义有错误的想法......也许我说得不对,但我会like 是制作一个包含所需库的自包含二进制文件(因此您不依赖于系统中存在的它)。那这叫什么?
    • 你指的是什么库?
    • 它是 libintl.so.8(请参阅此处的依赖项:opencsw.org/packages/findutils)...它又依赖于另外两个 GNU 库:ggettext_data 和 libiconv,它们不太可能在准系统上除非你也安装 Solaris 系统。
    • 您只能与静态库 (libfoo.a) 进行静态链接,而不能与动态库 (libfoo.so.1) 进行链接。对于像 libc 这样的系统库,静态链接 降低了 可移植性,并大大增加了您的程序无法在其他 Solaris 版本上运行的机会。
    • 所以如果我理解正确,我就完蛋了。没有办法可以将独立的“查找”二进制文件从一个系统复制到另一个系统,而无需先使用 pkgadd 安装依赖项?
    猜你喜欢
    • 1970-01-01
    • 2011-02-13
    • 2015-02-27
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    相关资源
    最近更新 更多