Como identificar o problema?
file cross_compiled_executable
Contém algo como:
interpreter /lib/ld-uClibc.so.0
e o problema é que esse arquivo não existe no destino.
Como resolver o problema?
Use um compilador adequado:
- a pessoa que criou a imagem de disco deve fornecer-lhe o compilador cruzado ou informá-lo exatamente como criá-lo, por exemplo, com crosstool-ng .
- compile sua própria imagem e compilação cruzada, por exemplo com Buildroot . Aqui está um exemplo .
-
use um compilador nativo no destino. Mas geralmente os alvos são muito mais lentos que o seu host e o espaço é restrito, então você provavelmente não quer fazer isso.
Você também pode usar um emulador funcional, como o QEMU, para criar, e só executar os programas em uma plataforma mais lenta, por exemplo, gem5 ou uma prancha lenta.
Apenas hackear o interpreter
é potencialmente insuficiente, especialmente você precisa garantir compatibilidade binária entre o programa e o alvo libc, ou interfaces de programa e kernel (syscalls, /proc
, etc.) se você tentar usar -static
(o kernel de destino pode ser muito antigo e não conter as interfaces necessárias). A única solução robusta é usar o toolchain correto.