Savstarpēja kompilēšana ARMv5, v6, v7 un v8 var būt sarežģīta vairāku iemeslu dēļ:
ARMv5 izaicinājumi
- EABI5: ARMv5 izmanto EABI5 (iegultās lietojumprogrammas bināro interfeisu 5), kas atšķiras no EABI7, ko izmanto ARMv7. Tas var izraisīt saderības problēmas, kompilējot ARMv5.- Atbalsta trūkums: ARMv5 ir vecāka arhitektūra, un to var neatbalstīt visi rīki un bibliotēkas. Tas var apgrūtināt ARMv5 savstarpēju kompilēšanu.
ARMv6 izaicinājumi
- EABI6: ARMv6 izmanto EABI6, kas ir līdzīgs EABI5, taču tam ir dažas atšķirības. Tas var izraisīt saderības problēmas, kompilējot ARMv6.- Thumb-2: ARMv6 atbalsta Thumb-2 instrukcijas, kuras var būt grūti izpildīt savstarpējās kompilēšanas laikā.
ARMv7 izaicinājumi
- EABI7: ARMv7 izmanto EABI7, kas atšķiras no EABI5 un EABI6. Tas var izraisīt saderības problēmas, kompilējot ARMv7.- Thumb-2: ARMv7 atbalsta arī Thumb-2 instrukcijas, kuras var būt grūti izpildīt savstarpējās kompilēšanas laikā.
ARMv8 izaicinājumi
- AArch64: ARMv8 izmanto AArch64 instrukciju kopu, kas atšķiras no AArch32, ko izmanto ARMv5, v6 un v7. Tas var radīt saderības problēmas, kompilējot ARMv8.- Neon: ARMv8 atbalsta Neon instrukciju kopu, ar kuru var būt grūti rīkoties, veicot savstarpēju kompilēšanu.
Izplatītie izaicinājumi
- Peldošā komata: savstarpēja kompilēšana ARMv5, v6, v7 un v8 var būt sarežģīta peldošā komata atbalsta atšķirību dēļ. Piemēram, ARMv5 un ARMv6 izmanto VFP (Vector Floating Point) instrukciju kopu, bet ARMv7 un ARMv8 izmanto NEON instrukciju kopu.- Bibliotēkas atbalsts: ARMv5, v6, v7 un v8 savstarpēja kompilēšana var būt sarežģīta bibliotēkas atbalsta atšķirību dēļ. Piemēram, dažas bibliotēkas var nebūt pieejamas ARMv5 vai ARMv6.
Risinājumi
- Izmantojiet pareizo rīkķēdi: izmantojiet mērķa arhitektūrai pareizo rīku ķēdi. Piemēram, izmantojiet ARMv7 rīkķēdi ARMv7 un ARMv8 rīkķēdi ARMv8.- Izmantojiet pareizos kompilatora karogus: izmantojiet pareizos kompilatora karogus mērķa arhitektūrai. Piemēram, izmantojiet karodziņu "-mfloat-abi=softfp" ARMv5 un ARMv6.
- Izmantojiet pareizo bibliotēku: izmantojiet mērķa arhitektūrai pareizo bibliotēku. Piemēram, izmantojiet libgcc bibliotēku ARMv5 un ARMv6.
- Izmantojiet pareizo EABI: izmantojiet pareizo EABI mērķa arhitektūrai. Piemēram, izmantojiet EABI7 ARMv7 un EABI8 ARMv8.
Secinājums
Savstarpēja kompilēšana ARMv5, v6, v7 un v8 var būt sarežģīta arhitektūras, instrukciju kopu un bibliotēkas atbalsta atšķirību dēļ. Tomēr, izmantojot pareizo rīku ķēdi, kompilatora karogus, bibliotēku un EABI, varat veiksmīgi kompilēt šīm arhitektūrām.Citāts:
[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