Instalação mínima do Busybox/Linux - não executa C

Instalação mínima do Busybox/Linux - não executa C

Estou tentando criar uma distribuição Busybox/Linux personalizada mínima, uma tarefa que está reconhecidamente acima da minha cabeça, mas decidi tentar. Meu problema é que sempre que tento executar um programa C que não seja o Busybox ou um utilitário Busybox, o ash reclama e me diz que o arquivo não foi encontrado. Montei a partição do meu sistema Arch, instalei GNU binutils e uClibc; sem dados. Também escrevi o programa C mais simples que consegui imaginar, sem dependências de nenhuma biblioteca:

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

Compilei, executei no Arch, ainda me deu "arquivo não encontrado" no meu sistema Busybox, embora seja mostrado quando executo ls. Para resolver o óbvio, sim, executei-o no mesmo diretório do programa e digitei ./antes do nome do arquivo.

Responder1

Meu palpite é que você não possui o vinculador dinâmico correto no sistema Busybox.

No seu sistema Arch faça isso: ldd ./simplestprogram

Imagino lddque lhe dará uma saída semelhante a esta:

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

Essa última linha /lib64/ld-linux-x86-64.so.2é o vinculador dinâmico. Aposto que isso não está presente no seu sistema Busybox.

Compilei um programa "olá, mundo" em meu laptop Arch, usado vimem modo binário para mudar /lib64/ld-linux-x86-64.so.2para /lib65/ld-linux-x86-64.so.2, salvei-o e tentei executá-lo. Recebi a mesma mensagem "arquivo não encontrado" que você recebeu.

Você pode nem ter o libc.soarquivo no seu sistema Busybox. É possível que apenas copiar os libc.soarquivos do linker dinâmico dos sistemas Arch para Busybox (preservando os diretórios!) possa funcionar, mas talvez não. Só não tenho certeza.

Uma coisa para tentar: instalar muslem sua máquina Arch. Compile seu programa simples com musl-gcc -static -o simple simple.c, mova aquele executável, que não possui nada vinculado dinamicamente, e experimente-o no sistema Busybox.

Responder2

Você precisa construir ou instalar um conjunto de ferramentas uClibc e compilar/vincular seus programas a ele. Você não os compila com o padrão gcc/make/....

Eu realmente preciso construir um conjunto de ferramentas uClibc?

informação relacionada