什么是二进制包?如何构建它们?

什么是二进制包?如何构建它们?

我想获取有关二进制包的详细信息并在 Linux 上运行它们。我正在运行 Debian 基础 (Ubuntu/Linux mint) Linux 操作系统。

  1. 如何从源代码构建二进制包?我可以直接下载应用程序(如firefox等)和游戏(如boswars等)的二进制包吗?
  2. 我运行一些“xyz.linux.run”格式的直接包这些包是什么?它们独立于依赖关系吗?或者它是预先构建的二进制包吗?
  3. 如何通过在linux上直接“xyz.linux.run”来构建可以在linux操作系统上运行的它们。
  4. 二进制包和 deb 包有什么区别?

答案1

从严格意义上讲,二进制文件是一种未将字符编码为人类可读文本的文件。更通俗地说,“二进制”是指经过编译的可执行代码的文件,尽管该文件本身可能不是可执行的(与其说是指权限,不如说是指单独运行的能力;一些二进制代码文件(例如库)是已编译,但无论权限如何,都不能自行执行)。作为独立可执行文件运行的二进制文件是“可执行文件”,尽管并非所有可执行文件都是二进制文件(这与权限有关:通过 shebang 调用解释器的可执行文本文件也是#!/bin/sh可执行文件)。

什么是二进制包?

Linux 上下文中的二进制包是包含(预构建的)可执行文件(而不是源代码)的应用程序包。

请注意,这并不意味着包文件本身就是可执行文件。包文件是包含其他文件的存档(有点像.zip),而“二进制”包文件是专门包含可执行文件的文件(尽管同样,可执行文件不一定是真正的二进制文件,实际上二进制包可用于已编译的库是二进制代码,但不是可执行文件)。但是,必须解压缩该包才能访问这些文件。

通常,这是由包管理系统(例如 apt/dpkg)为您处理的,它会下载包并解压并安装其中的二进制文件。

二进制包和 deb 包有什么区别?

没有——.deb包是二进制包,尽管有些.deb包包含源代码,但它们通常附加-src到它们的名称后面。

我运行一些“xyz.linux.run”格式的直接包这些包是什么?

这些通常是自解压的二进制包;它们的工作原理是将二进制负载嵌入到 shell 脚本中。 “自解压”意味着您不必调用另一个应用程序(例如包管理器)来解压和使用它们。但是,由于它们不与包管理器一起使用,因此解决它们的依赖关系可能会更加困难,因此一些此类包使用静态链接可执行文件(它们内置了所有必需的库),在使用它们时会浪费一些内存。

答案2

既然你的问题的其余部分已经得到了金发姑娘的回答,我将权衡第一部分,即如何从源头构建东西。

真正简短的版本是,当您从互联网下载源文件时,它们通常会有一个与之关联的自述文件,它应该准确地告诉您如何启动和运行程序。

但是告诉你阅读自述文件并不能真正回答问题,所以从基本意义上讲,你可以编写一个非常基本的程序,

    #include <stdio.h>

    int main( ) {
        printf("Hello World!");
    }

输入gcc helloWorld.cgcc构建该二进制文件并输出一个写入“Hello World!”的程序运行时到控制台。

好的,现在您已经构建了一个程序,但是每次需要编译某些内容时都必须输入要编译的每个源文件,这不是很糟糕吗?这就是目的makefiles。如果您运行的程序有一堆源文件,它通常会附带一个 makefile 或其他一些构建自动化文件(antCmakeautoconf其他文件)。

要构建这些类型的程序,只需make <build target>在目录内运行即可。我的 hello world 程序的 makefile 可能包含一个名为 的目标,helloworld该目标仅编译 helloWorld.c。我会运行它make helloworld,它会输出一个二进制文件。

请注意,从源代码构建东西可能需要很长的时间和大量的内存(Chromium 团队甚至建议使用第二个硬盘来构建源代码!)。另请注意,当您从源代码构建内容时,您将必须处理依赖项,而不是包管理器为您做这件事

答案3

我认为您正在寻找类似于 OpenSuse Build Service 项目的解决方案:

build.opensuse.org

还支持 Debian、CentOS、Red Hat。

相关内容