Минимальная установка Busybox/Linux — не запускается на C

Минимальная установка Busybox/Linux — не запускается на C

Я пытаюсь создать очень минималистичный кастомный дистрибутив Busybox/Linux, задача, которая, конечно, выше моих сил, но я решил попробовать. Моя проблема в том, что всякий раз, когда я пытаюсь запустить программу на C, которая не является Busybox или утилитой Busybox, ash жалуется и сообщает мне, что файл не найден. Я смонтировал раздел из своей системы Arch, установил GNU binutils и uClibc; ничего. Я также написал простейшую программу на C, которую смог придумать, без зависимостей от каких-либо библиотек:

int main(int argc, char *argv[])
{
    return 0;
}

Я скомпилировал, запустил на Arch, все равно выдал мне "файл не найден" на моей системе Busybox, хотя он отображается, когда я запускаю ls. Чтобы решить очевидную проблему, да, я запустил его из того же каталога, что и программу, и набрал ./перед именем файла.

решение1

Я предполагаю, что у вас в системе Busybox не установлен правильный динамический компоновщик.

В вашей системе Arch выполните следующее: ldd ./simplestprogram

Я полагаю, что lddвы получите примерно такой вывод:

linux-vdso.so.1 =>  (0x00007fff9b34f000)
libc.so.6 => /lib64/libc.so.6 (0x0000003b19e00000
/lib64/ld-linux-x86-64.so.2 (0x0000003b19a00000)

Последняя строка /lib64/ld-linux-x86-64.so.2— это динамический компоновщик. Держу пари, что его нет в вашей системе Busybox.

Я скомпилировал программу "hello, world" на моем ноутбуке Arch, использовал ее vimв двоичном режиме для изменения /lib64/ld-linux-x86-64.so.2на /lib65/ld-linux-x86-64.so.2, сохранил ее и попытался выполнить. Я получил то же сообщение "файл не найден", что и вы.

У вас может даже не быть libc.soфайла в вашей системе Busybox. Возможно, простое копирование libc.soфайлов динамического компоновщика из Arch в системы Busybox (с сохранением каталогов!) может сработать, но может и нет. Я просто не уверен.

Попробуйте установить muslна своей машине Arch. Скомпилируйте свою простую программу с помощью musl-gcc -static -o simple simple.c, переместите исполняемый файл, в котором нет ничего динамически связанного, и попробуйте его на системе Busybox.

решение2

Вам нужно собрать или установить uClibc toolchain и скомпилировать/связать ваши программы с ним. Вы не компилируете их с помощью стандартного gcc/make/....

Действительно ли мне нужно создавать набор инструментов uClibc?

Связанный контент