Kryžminis ARMv5, v6, v7 ir v8 kompiliavimas gali būti sudėtingas dėl kelių priežasčių:
ARMv5 iššūkiai
- EABI5: ARMv5 naudoja EABI5 (įterptosios programos dvejetainė sąsaja 5), kuri skiriasi nuo EABI7, naudojamo ARMv7. Tai gali sukelti suderinamumo problemų kompiliuojant ARMv5.– Trūksta palaikymo: ARMv5 yra senesnė architektūra ir gali būti palaikoma ne visi įrankiai ir bibliotekos. Dėl to gali būti sunku atlikti kryžminį ARMv5 kompiliavimą.
ARMv6 iššūkiai
- EABI6: ARMv6 naudoja EABI6, kuris yra panašus į EABI5, tačiau turi tam tikrų skirtumų. Tai gali sukelti suderinamumo problemų kompiliuojant ARMv6.- Thumb-2: ARMv6 palaiko Thumb-2 instrukcijas, kurias gali būti sudėtinga atlikti atliekant kryžminį kompiliavimą.
ARMv7 iššūkiai
- EABI7: ARMv7 naudoja EABI7, kuris skiriasi nuo EABI5 ir EABI6. Tai gali sukelti suderinamumo problemų kompiliuojant ARMv7.- Thumb-2: ARMv7 taip pat palaiko Thumb-2 instrukcijas, kurias gali būti sudėtinga atlikti atliekant kryžminį kompiliavimą.
ARMv8 iššūkiai
- AArch64: ARMv8 naudoja AArch64 instrukcijų rinkinį, kuris skiriasi nuo AArch32, naudojamo ARMv5, v6 ir v7. Tai gali sukelti suderinamumo problemų kompiliuojant ARMv8.- Neonas: ARMv8 palaiko „Neon“ instrukcijų rinkinį, kurį gali būti sudėtinga valdyti atliekant kryžminį kompiliavimą.
Dažni iššūkiai
- Slankaus kablelio: kryžminis ARMv5, v6, v7 ir v8 kompiliavimas gali būti sudėtingas dėl slankiojo kablelio palaikymo skirtumų. Pavyzdžiui, ARMv5 ir ARMv6 naudoja VFP (Vector Floating Point) instrukcijų rinkinį, o ARMv7 ir ARMv8 naudoja NEON instrukcijų rinkinį.– Bibliotekos palaikymas: kryžminis ARMv5, v6, v7 ir v8 kompiliavimas gali būti sudėtingas dėl bibliotekos palaikymo skirtumų. Pavyzdžiui, kai kurios bibliotekos gali būti nepasiekiamos ARMv5 arba ARMv6.
Sprendimai
- Naudokite teisingą įrankių grandinę: naudokite tinkamą įrankių grandinę tikslinei architektūrai. Pavyzdžiui, naudokite ARMv7 įrankių grandinę, skirtą ARMv7, ir ARMv8 įrankių grandinę, skirtą ARMv8.- Naudokite teisingas kompiliatoriaus vėliavėles: naudokite tinkamas tikslinės architektūros kompiliatoriaus vėliavėles. Pavyzdžiui, naudokite žymą „-mfloat-abi=softfp“, skirtą ARMv5 ir ARMv6.
- Naudokite teisingą biblioteką: naudokite tinkamą tikslinės architektūros biblioteką. Pavyzdžiui, naudokite „libgcc“ biblioteką, skirtą ARMv5 ir ARMv6.
- Naudokite teisingą EABI: naudokite tinkamą tikslinės architektūros EABI. Pavyzdžiui, naudokite EABI7, skirtą ARMv7, ir EABI8, skirtą ARMv8.
Išvada
Kryžminis ARMv5, v6, v7 ir v8 kompiliavimas gali būti sudėtingas dėl architektūros, instrukcijų rinkinių ir bibliotekos palaikymo skirtumų. Tačiau naudodami tinkamą įrankių grandinę, kompiliatoriaus vėliavėles, biblioteką ir EABI, galite sėkmingai kompiliuoti šias architektūras.Citatos:
[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