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

Pan*_*dya 14 compiling packaging package-management binary deb

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

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

gol*_*cks 23

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

什么是二进制包?

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

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

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

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

没有——.deb包是二进制包,虽然有.debs 包含源代码,但这些通常-src附加到它们的名称之后。

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

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


小智 7

由于您的其余问题是由金发姑娘回答的,因此我将权衡第一部分,即如何从源头构建事物。

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

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

    #include <stdio.h>

    int main( ) {
        printf("Hello World!");
    }
Run Code Online (Sandbox Code Playgroud)

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

好的,现在您已经构建了一个程序,但是每次需要编译某些东西时都必须键入要编译的每个源文件,这不是很糟糕吗?那makefiles是为了什么。如果跨有一堆的源文件通常会用一个makefile文件或其他一些构建自动化文件(的程序运行antCmakeautoconf什么的)。

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

请注意,从源代码构建东西可能需要很长时间和大量内存(Chromium 团队甚至建议使用第二块硬盘来构建他们的源代码!)。还要注意,当你从源代码构建东西时,你将不得不处理依赖关系,而不是包管理器为你做