【问题标题】:How do I compile the time.c on Alpine?如何在 Alpine 上编译 time.c?
【发布时间】:2019-12-26 14:11:26
【问题描述】:

我不喜欢 Alpine Linux 中内置的 time 实用程序,并希望根据我的需要对其进行改进——我想编辑 time.c 并将其编译为二进制文件。我已经完成了apk add build-base 来安装 gcc 并从 Github 复制粘贴了 time.c,但是当我执行 gcc /tmp/time.c -o /tmp/time 时,我得到了:

/tmp/time.c:34:10: fatal error: libbb.h: No such file or directory
 #include "libbb.h"
          ^~~~~~~~~

所以我也复制粘贴了它,但它依赖于几十个头文件。我在某处看到我可能需要apk add alpine-sdk,也许它也会保证版本兼容性,所以我这样做了,但 gcc 仍然看不到头文件。我应该提供一些-I 标志吗?
为了最终编译我的自定义 time.c,我真正需要做什么?

P.S.:time 可能有一个 SO 标签,但我找不到。

UPD:我已经复制了整个 include 文件夹,但上面写着:

In file included from /tmp/time.c:34:
include/libbb.h:406:42: error: 'ENABLE_FEATURE_VERBOSE' undeclared here (not in a function)
  FILEUTILS_VERBOSE         = (1 << 12) * ENABLE_FEATURE_VERBOSE, /* -v */
                                          ^~~~~~~~~~~~~~~~~~~~~~

但即使在整个 https://github.com/mirror/busybox 中我也找不到它的定义位置

UPD:哦不,它更复杂。

/ # ls -l `which time`
lrwxrwxrwx    1 root     root            12 Jan 30  2019 /usr/bin/time -> /bin/busybox

好像没有time二进制这样的东西。

【问题讨论】:

  • 编译比复制一个文件要多得多...在您从busybox运行make menuconfig之后,构建系统将定义ENABLE_FEATURE_VERBOSE。你最好克隆整个 repo...
  • Busybox 将其所有实用程序组合在一个二进制文件中。这意味着它并不意味着任何人都可以编译任何单个文件或实用程序并为它们生成单独的可执行文件,并且作为副作用,各种模块和命令之间存在很多依赖关系。您可能需要一起在系统上构建/替换busybox。 (例如 ENABLE_FEATURE_VERBOSE 是作为busybox构建过程的一部分创建的)
  • 如果你改变时间的工作方式,你会破坏任何依赖它的东西

标签: c build alpine


【解决方案1】:

假设 GNU 时间功能是您所追求的,而 BusyBox time 不足以满足您的需求,只需安装最近在 Alpine 上提供的 GNU time 软件包:

apk add time --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing

安装后,它将用 GNU 时间可执行文件替换 /usr/bin/time BusyBox 符号链接。

【讨论】:

  • 不幸的是,它似乎与 Alpine 存在相同的问题——它在一个点后打印两位数的时间。 Ubuntu 和 Mac OS 打印更多数字 -- 3. 我想要改进的是使用 %03 而不是 %02 打印。
  • @Nakilon 我明白了。然后你可以尝试你原来的计划来修补和构建时间,但这次使用 GNU 时间:git://git.sv.gnu.org/time
  • 或者尝试获取适用于您的确切 Ubuntu 软件包版本的源代码(使用 deb-src 或从软件包下载页面),并尝试在 Alpine 上构建它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-10
  • 1970-01-01
相关资源
最近更新 更多