build cpp程序在不同版本的linux上运行

时间:2014-04-10 06:45:09

标签: c++ linux build

某些linux程序例如mongodb二进制文件可以在不同版本的linux上运行,无论主机gcc版本和glibc版本如何。

怎么做?静态链接所有库?但我听说glibc不应该是静态链接的。

1 个答案:

答案 0 :(得分:2)

要创建独立于已安装库的可执行文件,必须静态链接它。

但是,如果应用程序的构建非常庞大/复杂,那么通常更好地分发源代码并在目标系统上构建/构建,或者预先构建最常用的变体。

您不希望静态链接glibc(以及应用程序可能使用的所有其他库)的原因是即使最简单的应用程序也会变成大约700K-1MB。鉴于我的发行版在/ usr / bin中有1900个条目,这将使其最小约2GB,现在它是400MB(包括像clang,emacs和skype这样的野兽,所有这些都以非静态链接的形式超过7MB) - 它们可能每个都有十几个库依赖项 - 例如,如果使用静态链接编译它,则会从10MB以下增长到大约100-120MB。

当然,使用静态链接时,每个应用程序的所有代码都需要作为单独的副本加载到内存中。因此整体内存使用量大幅增加。