Доступен ли busybox в форме общей библиотеки? - PullRequest
6 голосов
/ 21 августа 2010

Доступен ли busybox в форме разделяемой библиотеки? Я хотел бы использовать отдельные приложения программно, а не system(). Я слышал о libbusybox и libbb, но не смог найти никакой документации.

Ответы [ 2 ]

6 голосов
/ 30 августа 2012

Существует библиотека busybox в общей форме, которая называется libbusybox(.so), вам просто нужно включить ее при создании 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 '.

Вы можете даже создать оболочку busybox, которая не использует fork или system, но не работает хорошоеще.

0 голосов
/ 21 августа 2010

Если вы находитесь на крошечной встроенной системе, где это важно, вы можете связать свое собственное приложение с двоичным файлом busybox, а затем вызывать его функции без какого-либо динамического компоновщика.

Если это не так, просто используйте system (), или какое-нибудь комбо fork / exec.

Маловероятно, что вы захотите вызывать утилиты так часто, что производительность имеет значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...