2016-02-01 1 views
0

Je tente de construire une application pour ARMv6 mais, échouent.construire pour ARMv6 avec gnueabihf

Je suppose que le problème est la chaîne d'outils qui prend en charge Hard Float, mais pas ARMv6.

Eh bien, je commence par définir -march = armv6, où la compilation échoue.

/opt/gcc-linaro-arm-linux-gnueabihf-4.8-2014.03_linux/arm-linux-gnueabihf/libc/usr/include/bits/byteswap.h: In function ‘__bswap_32’: /opt/gcc-linaro-arm-linux-gnueabihf-4.8-2014.03_linux/arm-linux-gnueabihf/libc/usr/include/bits/byteswap.h:45:1: sorry, unimplemented: Thumb-1 hard-float VFP ABI

De plus, je mis -mfloat-abi = doux qui font l'Linker se plaindre:

/opt/gcc-linaro-arm-linux-gnueabihf-4.8-2014.03_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: error: prog uses VFP register arguments, prog.o does not /opt/gcc-linaro-arm-linux-gnueabihf-4.8-2014.03_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: failed to merge target specific data of file prog.o

Eh bien, comment puis-je construire réellement pour ARMv6? Ou y a-t-il un bug dans la chaîne d'outils?

+0

Utilisez-vous Linux? Linaro est pour Linux OS/glibc et vous aurez des problèmes à moins que vous compiliez avec '-ffreestanding'. Je vous suggère d'utiliser [un compilateur newlib] (https://launchpad.net/gcc-arm-embedded) si vous êtes vraiment intégré. Le tableau de bord a plusieurs versions pour différents hôtes (y compris une boîte de développement d'hôte Linux). Sinon, vous pouvez utiliser la balise 'embedded-linux'. –

Répondre

1

Votre chaîne d'outils est configurée pour émettre du code Thumb par défaut. Le problème avec cela est que les seuls codages Thumb d'instructions à virgule flottante sont des Thumb-2 32 bits, qui n'existent pratiquement que sur ARMv7 ou plus tard *, et ne sont certainement pas disponibles sur ARMv6 brut.

Pour cibler les architectures antérieures à la v7, il est préférable de compiler avec -marm pour générer du code ARM au lieu du jeu relativement limité d'instructions Thumb 16 bits.

* Je soupçonne que la plupart des gens ne rencontreront jamais sciemment un ARM1156.

+0

Super, merci. En plus de votre message: j'ai dû expulser -mfloat-abi = soft, à côté de -marm. –

+0

@ b-boy C'est une chaîne d'outils gnueabi ** hf **, donc oui, les librairies groupées vont uniquement se lier aux objets hard-float. Ils sont probablement aussi Thumb-2, donc ne liez pas non plus statiquement; vous voulez vraiment construire contre le sysroot du périphérique cible, plutôt que le minimum fourni avec la chaîne d'outils, pour éviter de mauvaises surprises et/ou de subtiles incompatibilités. – Notlikethat