为什么需要重新编译一些linux二进制文件?

时间:2016-07-18 08:51:17

标签: linux compilation binary

我一直认为需要在本地机器上编译linux二进制文件才能运行,原因各不相同(共享库,...)。 但似乎有些能够在不需要重新编译的情况下运行多个Linux发行版。

例如:hashcat。他们构建了一个32位和64位二进制文​​件,但都是预编译的。

这怎么可能,在一般情况下,这可能是什么?

**我只谈论Linux世界。

1 个答案:

答案 0 :(得分:1)

有多种方法可以构建二进制文件。一种方法是"静态",这意味着它包含了可执行文件本身所需的所有库,因此不会成为外部依赖项。但是,在构建时,您可以自行决定将包含哪些库以及在运行时查找哪些库。因此,您可以在二进制文件中包含一些非常具体的库,但是依赖于已经在系统上的一些更标准的库。

除此之外,大多数库将提供固定的接口,通常随着时间的推移保持不变。这样,您在系统上拥有的确切版本或编译的确切程度并不重要。只要可执行文件期望存在的函数存在(并提供相同的"行为"),事情就会运行得很好。