Ristkompileerimine ARMv5, v6, v7 ja v8 jaoks võib olla keeruline mitmel põhjusel.
ARMv5 väljakutsed
- EABI5: ARMv5 kasutab EABI5-d (embedded Application Binary Interface 5), mis erineb ARMv7 kasutatavast EABI7-st. See võib ARMv5 jaoks kompileerimisel põhjustada ühilduvusprobleeme.- Toe puudumine: ARMv5 on vanem arhitektuur ja kõik tööriistad ja teegid ei pruugi seda toetada. See võib ARMv5 jaoks ristkompileerimise raskendada.
ARMv6 väljakutsed
- EABI6: ARMv6 kasutab EABI6, mis on sarnane EABI5-ga, kuid millel on mõned erinevused. See võib ARMv6 jaoks kompileerimisel põhjustada ühilduvusprobleeme.- Pöial-2: ARMv6 toetab Thumb-2 juhiseid, mille käsitlemine ristkompileerimisel võib olla keeruline.
ARMv7 väljakutsed
- EABI7: ARMv7 kasutab EABI7, mis erineb EABI5-st ja EABI6-st. See võib ARMv7 jaoks kompileerimisel põhjustada ühilduvusprobleeme.- Pöial-2: ARMv7 toetab ka Thumb-2 juhiseid, mille käsitlemine ristkompileerimisel võib olla keeruline.
ARMv8 väljakutsed
- AArch64: ARMv8 kasutab AArch64 käsukomplekti, mis erineb ARMv5, v6 ja v7 poolt kasutatavast AArch32-st. See võib ARMv8 jaoks kompileerimisel põhjustada ühilduvusprobleeme.- Neon: ARMv8 toetab Neoni juhiste komplekti, mille käsitlemine võib ristkompileerimisel olla keeruline.
Levinud väljakutsed
- Ujukoma: ristkompileerimine ARMv5, v6, v7 ja v8 jaoks võib ujukomatoe erinevuste tõttu olla keeruline. Näiteks ARMv5 ja ARMv6 kasutavad VFP (Vector Floating Point) käsukomplekti, ARMv7 ja ARMv8 aga NEON käsukomplekti.- Teeki tugi: ARMv5, v6, v7 ja v8 ristkompileerimine võib olla keeruline teegi toe erinevuste tõttu. Näiteks ei pruugi mõned teegid ARMv5 või ARMv6 jaoks saadaval olla.
Lahendused
- Kasutage õiget tööriistaahelat: kasutage sihtarhitektuuri jaoks õiget tööriistaahelat. Näiteks kasutage ARMv7 tööriistaahelat ARMv7 ja ARMv8 tööriistaahelat ARMv8.- Kasutage õigeid kompilaatori lippe: kasutage sihtarhitektuuri jaoks õigeid kompilaatori lippe. Näiteks kasutage ARMv5 ja ARMv6 jaoks lippu "-mfloat-abi=softfp".
- Kasutage õiget teeki: kasutage sihtarhitektuuri jaoks õiget teeki. Näiteks kasutage ARMv5 ja ARMv6 jaoks libgcc teeki.
- Kasutage õiget EABI-d: kasutage sihtarhitektuuri jaoks õiget EABI-d. Näiteks kasutage ARMv7 jaoks EABI7 ja ARMv8 jaoks EABI8.
Järeldus
ARMv5, v6, v7 ja v8 ristkompileerimine võib arhitektuuri, käsukomplektide ja teegi toe erinevuste tõttu olla keeruline. Kuid kasutades õiget tööriistaahelat, kompilaatori lippe, teeki ja EABI-d, saate nende arhitektuuride jaoks edukalt ristkompileerida.Tsitaadid:
[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