Compilation 如何为Solaris 8、9、10和AIX创建GNU find的静态二进制文件(未链接、可移植)

Compilation 如何为Solaris 8、9、10和AIX创建GNU find的静态二进制文件(未链接、可移植),compilation,find,solaris,gnu,aix,Compilation,Find,Solaris,Gnu,Aix,我们(我的团队)正在寻找合适的方法,将GNU find命令编译为Solaris 8、9和10的静态(非动态链接)可移植二进制文件(我可以从一个系统复制到另一个系统) 有人会有一个好的方法来实现这一点吗 我们之所以需要它有几个原因,但其中一个事实是,出于政治和技术原因,我们不能将它打包到所有需要传输的服务器上。这很复杂,但简而言之,我支持使用远程代理调用系统命令的应用程序(称为BladeLogic Server Automation)。您可能已经看到了我关于它的其他帖子,但是我们在Solaris上

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

有人会有一个好的方法来实现这一点吗

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


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

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

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

在特定情况下,我试图将find二进制文件复制到的Solaris区域中不存在所需的libc版本。这可能是一个在全局区域中链接它的问题,但是我们不能在每个客户机服务器上都这样做(没有客户机的批准,正如我上面解释的)。对我们来说,最好和最简单的解决方案是能够简单地将find二进制文件复制到我们需要的地方,而不必安装或链接任何依赖项(即使它只是一个lib)。libc必须存在于您的区域中,否则任何程序都不会运行。这个库实现了标准的c头,在Linux上至少实现了标准的posix头。find可能依赖于Linux的libc的某些功能,而这些功能在Solaris中是不可用的,这就是为什么我问您是否尝试过它,以及出现了什么问题?好吧,实际上我对编译有点陌生,我想我对静态链接的含义有错误的理解。。。也许我说的不对,但我想做的是制作一个自包含的二进制文件,其中包含ann所需的库(因此,您不必依赖系统中存在的库)。这叫什么?你指的是什么必需的库?它是libintl.so.8(请参阅此处的依赖项:)。。。这反过来又依赖于另外两个GNU库:ggettext_data和libiconv,除非您也安装了它们,否则它们不可能在裸体Solaris系统上。您只能静态链接到静态库(libfoo.a),不能静态链接到动态库(libfoo.so.1)。对于像libc这样的系统库,静态链接降低了可移植性,并大大增加了您的程序无法在其他Solaris版本上工作的可能性。因此,如果我理解正确,我就完蛋了。不需要先用pkgadd安装依赖项,就无法将独立的“find”二进制文件从一个系统复制到另一个系统?