
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 ldd
que 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 vim
em modo binário para mudar /lib64/ld-linux-x86-64.so.2
para /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.so
arquivo no seu sistema Busybox. É possível que apenas copiar os libc.so
arquivos 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 musl
em 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?