【发布时间】: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构建过程的一部分创建的)
-
如果你改变时间的工作方式,你会破坏任何依赖它的东西