Navzkrižno prevajanje za ARMv5, v6, v7 in v8 je lahko zahtevno zaradi več razlogov:
ARMv5 izzivi
- EABI5: ARMv5 uporablja EABI5 (Embedded Application Binary Interface 5), ki se razlikuje od EABI7, ki ga uporablja ARMv7. To lahko povzroči težave z združljivostjo pri prevajanju za ARMv5.- Pomanjkanje podpore: ARMv5 je starejša arhitektura in je morda ne podpirajo vsa orodja in knjižnice. To lahko oteži navzkrižno prevajanje za ARMv5.
ARMv6 izzivi
- EABI6: ARMv6 uporablja EABI6, ki je podoben EABI5, vendar ima nekaj razlik. To lahko povzroči težave z združljivostjo pri prevajanju za ARMv6.- Thumb-2: ARMv6 podpira ukaze Thumb-2, ki so pri navzkrižnem prevajanju lahko zahtevni.
ARMv7 izzivi
- EABI7: ARMv7 uporablja EABI7, ki se razlikuje od EABI5 in EABI6. To lahko povzroči težave z združljivostjo pri prevajanju za ARMv7.- Thumb-2: ARMv7 podpira tudi ukaze Thumb-2, ki so pri navzkrižnem prevajanju lahko zahtevni.
ARMv8 izzivi
- AArch64: ARMv8 uporablja nabor navodil AArch64, ki se razlikuje od AArch32, ki ga uporabljajo ARMv5, v6 in v7. To lahko povzroči težave z združljivostjo pri prevajanju za ARMv8.- Neon: ARMv8 podpira nabor navodil Neon, ki je pri navzkrižnem prevajanju lahko zahteven.
Pogosti izzivi
- Plavajoča vejica: navzkrižno prevajanje za ARMv5, v6, v7 in v8 je lahko zahtevno zaradi razlik v podpori za plavajočo vejico. Na primer, ARMv5 in ARMv6 uporabljata nabor navodil VFP (Vector Floating Point), medtem ko ARMv7 in ARMv8 uporabljata nabor navodil NEON.- Podpora za knjižnice: navzkrižno prevajanje za ARMv5, v6, v7 in v8 je lahko zahtevno zaradi razlik v podpori za knjižnice. Na primer, nekatere knjižnice morda niso na voljo za ARMv5 ali ARMv6.
Rešitve
- Uporabite pravilno verigo orodij: uporabite pravilno verigo orodij za ciljno arhitekturo. Uporabite na primer verigo orodij ARMv7 za ARMv7 in verigo orodij ARMv8 za ARMv8.- Uporabite pravilne zastavice prevajalnika: uporabite pravilne zastavice prevajalnika za ciljno arhitekturo. Uporabite na primer zastavico `-mfloat-abi=softfp` za ARMv5 in ARMv6.
- Uporabi pravilno knjižnico: Uporabi pravilno knjižnico za ciljno arhitekturo. Uporabite na primer knjižnico `libgcc` za ARMv5 in ARMv6.
- Uporabite pravilni EABI: uporabite pravilen EABI za ciljno arhitekturo. Uporabite na primer EABI7 za ARMv7 in EABI8 za ARMv8.
Zaključek
Navzkrižno prevajanje za ARMv5, v6, v7 in v8 je lahko zahtevno zaradi razlik v arhitekturi, nizih navodil in podpori za knjižnico. Z uporabo pravilne verige orodij, zastavic prevajalnika, knjižnice in EABI pa lahko uspešno navzkrižno prevajate za te arhitekture.Citati:
[1] https://stackoverflow.com/questions/45835134/cross-compile-to-armv7-failed
[2] https://forum.syncthing.net/t/armv5-cross-compile-error/11014
[3] https://xdaforums.com/t/q-kernel-armv6-vs-armv7-cross-compile-question-tun-ko-for-lg-revo.1225207/
[4] https://developer.android.com/ndk/guides/abis
[5] https://groups.google.com/g/golang-nuts/c/o25uLLJU6jY