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


12

我想了解有关二进制包的详细信息,然后在Linux上运行它们。我正在运行Debian base(Ubuntu / Linux mint)Linux操作系统。

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

您是否找到了如何从源代码构建二进制包?
Dr.jacky

Answers:


17

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

什么是二进制包?

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

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

通常,软件包管理系统(例如apt / dpkg)会为您解决这个问题,该系统会下载软件包并解压并在其中安装二进制文件。

二进制包和deb包之间的区别是什么?

没有- .deb软件包是二进制软件包,尽管有.debs包含源代码,但通常会-src在其名称后附加。

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

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


优秀答案!,我是否应与以下问题分开:如何从源代码构建预构建的可执行文件(二进制包)?
潘迪2014年

是的,如果还没有以某种形式回答,那将是一个很好的问题。
goldilocks

6

由于您的其余问题已由金发姑娘回答,因此我将在第一部分中探讨如何从源头构建事物。

真正简短的版本是,当您从Internet下载源文件时,它们通常会具有与它们相关的自述文件,该文件应告诉您确切的方法来启动和运行程序。

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

    #include <stdio.h>

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

并输入,gcc helloWorld.c然后gcc将生成该二进制文件并输出一个编写“ Hello World!”的程序。运行时转到控制台。

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

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

请注意,从源代码构建内容可能会花费很长的时间并占用大量内存(Chromium团队甚至建议使用第二个硬盘来构建其源代码!)。还要注意,从源代码构建东西时,您必须处理依赖关系,而不是由程序包管理器为您完成

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.