Минимальная установка 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. Чтобы ответить на очевидное, да, я запустил его из того же каталога, что и программа, и набрал ./ перед именем файла.

2 Solutions collect form web for “Минимальная установка Busybox / Linux – не будет работать C”

Я предполагаю, что у вас нет правильного динамического компоновщика в системе 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.

Вам нужно создать или установить программную цепочку uClibc и скомпилировать / связать свои программы с этим. Вы не компилируете их со стандартным gcc / make / ….

Мне действительно нужно создать инструментальную цепочку uClibc?

  • Ошибка файла conio.h
  • Скомпилированный исполняемый файл
  • libstdc ++. so.6: open failed: нет такого файла или каталога
  • Каковы недостатки uClibc?
  • Неустранимая ошибка: mcrypt.h: Нет такого файла или каталога
  • Каждый процесс считается нитью?
  • Разница между максимальным размером резидентного набора, указанным / usr / bin / time vs. getrusage?
  • Средство чтения в командной строке (например, «меньше»), которое может указать строку, где пользователь перестает читать
  • Как установить GCC 5 на debian jessie 8.1
  • Наиболее распространенная кодировка для строк в C ++ в Linux (и Unix?)
  • Ошибка компиляции драйверов VDI FTDI: не удается найти version.h
  • Linux и Unix - лучшая ОС в мире.