Instalación mínima de Busybox/Linux: no ejecuta C

Instalación mínima de Busybox/Linux: no ejecuta C

Estoy intentando crear una distribución Busybox/Linux personalizada y mínima, una tarea que ciertamente está por encima de mi cabeza, pero pensé en intentarlo. Mi problema es que cada vez que intento ejecutar un programa en C que no es Busybox o una utilidad de Busybox, Ash se queja y me dice que no se encuentra el archivo. Monté la partición desde mi sistema Arch, instalé GNU binutils y uClibc; no dados. También escribí el programa C más simple que se me ocurrió sin dependencias de ninguna biblioteca:

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

Compilé, ejecuté en Arch, todavía me dio "archivo no encontrado" en mi sistema Busybox, aunque se muestra cuando ejecuto ls. Para abordar lo obvio, sí, lo ejecuté desde el mismo directorio que el programa y escribí ./antes del nombre del archivo.

Respuesta1

Supongo que no tienes el enlazador dinámico correcto en el sistema Busybox.

En su sistema Arch haga esto: ldd ./simplestprogram

Me imagino lddque te dará un resultado similar a este:

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

Esa última línea /lib64/ld-linux-x86-64.so.2es el enlazador dinámico. Apuesto a que eso no está presente en su sistema Busybox.

Compilé un programa "hola, mundo" en mi computadora portátil Arch, lo usé vimen modo binario para cambiar /lib64/ld-linux-x86-64.so.2a /lib65/ld-linux-x86-64.so.2, lo guardé e intenté ejecutarlo. Recibí el mismo mensaje de "archivo no encontrado" que recibiste.

Es posible que ni siquiera tengas el libc.soarchivo en tu sistema Busybox. Es posible que simplemente copiar los libc.soarchivos del enlazador dinámico de Arch a los sistemas Busybox (¡conservando directorios!) funcione, pero puede que no. Simplemente no estoy seguro.

Una cosa que puedes probar: instálalo muslen tu máquina Arch. Compile su programa simple con musl-gcc -static -o simple simple.c, mueva ese ejecutable, que no tiene nada vinculado dinámicamente, y pruébelo en el sistema Busybox.

Respuesta2

Necesita crear o instalar una cadena de herramientas uClibc y compilar/vincular sus programas con ella. No los compilas con el estándar gcc/make/....

¿Realmente necesito crear una cadena de herramientas uClibc?

información relacionada