Simán fordítok ezek nélkül egy main.so-t, ami shared library main() függvénnyel ARM architectúrán.
Csakhogy az Android alkalmazások nem ilyenek. Mindenképpen kell neked egy Androidos entry point, amit az Android loader meg tud találni. Ezek nem sima ARM binárisok.
https://source.android.com/docs/core/runtime
A rendszer ezt fogja betölteni, ez már betölthet más binárisokat is a saját DEX archívumán belül.
Pontosabban telepítéskor átfuttatja a dex2oat eszközön, hogy ahead-of-time legyen belőle egy olyan ARM bináris, amit az ő betöltője be tud tölteni. Nem standard GNU/Linux loadert használnak.
At install time, ART compiles apps using the on-device dex2oat tool. This utility accepts DEX files as input and generates a compiled app executable for the target device. The utility should be able to compile all valid DEX files without difficulty.
Natív binárisokat is csak az NDK segítségével használhatsz.
A lényeg, hogy az Android nem csak egy sima GNU/Linux, az egész permission-kezelése nem engedi meg, hogy olyan laza legyen, mint a POSIX processz modell, emiatt a betöltő sem szokványos stb.