Я предполагаю, что у вас нет правильного динамического компоновщика в системе 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.
Ваш исполняемый файл использует буферизованный вывод, поэтому вы увидите что-то с tail
, только если создается более одного блока вывода. Размер такого блока будет 4k и более.
Если вы написали исполняемый файл самостоятельно, измените вывод на строковый буфер или на небуферизованный.
Запустите вашу программу как:
nohup stdbuf -oL./executable &> /tmp/out.log &
stdbuf может изменить буферизацию по умолчанию.