![什么是二进制包?如何构建它们?](https://linux22.com/image/36308/%E4%BB%80%E4%B9%88%E6%98%AF%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%8C%85%EF%BC%9F%E5%A6%82%E4%BD%95%E6%9E%84%E5%BB%BA%E5%AE%83%E4%BB%AC%EF%BC%9F.png)
我想获取有关二进制包的详细信息并在 Linux 上运行它们。我正在运行 Debian 基础 (Ubuntu/Linux mint) Linux 操作系统。
- 如何从源代码构建二进制包?我可以直接下载应用程序(如firefox等)和游戏(如boswars等)的二进制包吗?
- 我运行一些“xyz.linux.run”格式的直接包这些包是什么?它们独立于依赖关系吗?或者它是预先构建的二进制包吗?
- 如何通过在linux上直接“xyz.linux.run”来构建可以在linux操作系统上运行的它们。
- 二进制包和 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.c
并gcc
构建该二进制文件并输出一个写入“Hello World!”的程序运行时到控制台。
好的,现在您已经构建了一个程序,但是每次需要编译某些内容时都必须输入要编译的每个源文件,这不是很糟糕吗?这就是目的makefiles
。如果您运行的程序有一堆源文件,它通常会附带一个 makefile 或其他一些构建自动化文件(ant
、Cmake
或autoconf
其他文件)。
要构建这些类型的程序,只需make <build target>
在目录内运行即可。我的 hello world 程序的 makefile 可能包含一个名为 的目标,helloworld
该目标仅编译 helloWorld.c。我会运行它make helloworld
,它会输出一个二进制文件。
请注意,从源代码构建东西可能需要很长的时间和大量的内存(Chromium 团队甚至建议使用第二个硬盘来构建源代码!)。另请注意,当您从源代码构建内容时,您将必须处理依赖项,而不是包管理器为您做这件事
答案3
我认为您正在寻找类似于 OpenSuse Build Service 项目的解决方案:
build.opensuse.org
还支持 Debian、CentOS、Red Hat。