busybox是否以共享库形式提供?

时间:2010-08-21 01:08:09

标签: c linux

busybox是否以共享库形式提供?我想以编程方式使用单个应用,而不是使用system()。我听说过libbusybox和libbb但找不到任何文档。

2 个答案:

答案 0 :(得分:6)

在名为libbusybox(.so)的共享表单中存在busybox库,您只需在创建menuconfig时启用它。编译后,它将在0_lib文件夹中可用。在这个库中,你有一个很好的小函数叫int lbb_main(char **argv)

您需要在代码中执行以下操作:

extern int lbb_main(char **argv);

int main()
{
    char* strarray[] = {"ifconfig",0};
    lbb_main(strarray);

    return 1;
}

您可以导入libb.h,但这对我不起作用,因为我遇到了很多错误。

之后你只需要使用像gcc -o code code.c -Lpath_to_0_lib_fodler -lbusybox这样的东西进行编译就可以了!

要拦截输出,你必须重新定义printf和类似的调用,但是使用诸如#define printf(...) code' in libb.h'之类的soemthing宏显然是可行的。

你甚至可以生成不使用fork或system的busybox的shell,但是这样做还不行。

答案 1 :(得分:0)

如果您使用的是一个很小的嵌入式系统,您可以将自己的应用程序链接到busybox二进制文件中,然后您可以在没有任何动态链接器的情况下调用其函数。

如果不是,只需使用system()或fork / exec组合。

您不太可能经常调用实用程序以至于性能很重要。