代码之家  ›  专栏  ›  技术社区  ›  Nick

分发一个静态链接的ELF 32位二进制文件——它会在所有平台上运行吗?

  •  3
  • Nick  · 技术社区  · 14 年前

    我的团队已经准备好发布我们的Linux程序的第一个版本,并希望以最简单的方式发布(对于用户)。

    该程序不需要外部文件,不需要安装,并且是静态链接的。

    ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.15, not stripped
    

    我的问题是这样的二进制文件是否能在大多数Linux平台上运行(Ubuntu、Redhat、OpenSuSE等)?

    我也有点担心“对于GNU/Linux2.6.15”,这是否意味着他们需要内核2.6.15或更高版本?

    1 回复  |  直到 14 年前
        1
  •  3
  •   Lothar    14 年前

    不再推荐完全静态链接的程序。

    可移植性层从内核调用转移到基本库(还记得pthread desaster和linuxthreads的问题吗?<->nptl线程?).

    遵循LSB 4.0标准。信任上面提到的库的存在(不幸的是,没有这么多库),并将所有其他共享库与您的应用程序捆绑在一起。有一个链接器标志(我认为是-l),您可以在其中设置一个在共享库加载期间优先于所有其他设置的ldd路径,以便始终首先加载libs。

    确保所有库只调用LSB批准的API函数(或查看LSB网站,了解不支持的LSB API调用的严重程度-有时您根本无法避免,而且它们有支持此调用的分发列表)。

    这是交付二进制可执行文件的推荐方法。与Windows/MacOSX相比,它在Linux上仍然很差劲。