Question

Les gars, J'ai un projet que j'ai compilé pour le processeur ARM Cortex-A8. Je fais usage de GCC pour le faire. Actuellement, la taille de mon exécutable est 220,1 KB. Maintenant, je modifie mon makefile et ajouter le -mthumb de drapeau, les regards de ligne de makefile un peu comme ça -

gcc -mcpu=cortex-a8 -mthumb -marm -mfloat-abi=softfp -mfpu=neon

Je le fais des changements dans tous mes makefiles et je construis mon projet, mais l'exécutable je reçois enfin continue à être de 220,1 Ko.

J'ai fait un changement plus à ma ligne de commande, j'ai ajouté l'option -mthumb-interfonctionnement

gcc -mcpu=cortex-a8 -mthumb -mthumb-interwork -marm -mfloat-abi=softfp -mfpu=neon

Encore une fois, je reçois la même taille exécutable 220,1 KB. Am tout ce que je manque en faisant cela?

J'ai écrit un petit programme, pour trouver le plus petit des deux nombres et je compilé à l'aide de la ligne de commande suivante

gcc main.c -o main

je reçois un fichier exécutable 8.5 Ko

Ensuite, je fais un

gcc -mthumb main.c -o main

je reçois encore un exécutable 8.5 Ko.

Quel est le problème ici?

Je l'ai fait un cat /proc/cpuinfo pour voir si le pouce est vraiment pris en charge par mon processeur, et je vois qu'il est en effet pris en charge. Je reçois -

Processor: ARMv7 Processor rev 5 (v7l)
Features: swp half thumb fastmult vfp edsp neon vfpv3
....
....
Était-ce utile?

La solution

Je pense que vous avez des moyens -marm un bras sans le pouce, essayez de supprimer -marm.

Autres conseils

Il est difficile de dire sans avoir le code réel, mais j'ai quelques suggestions.

  1. Activer les optimisations. (Par exemple, -O3 -ffunction-sections -fdata-sections)
  2. Strip l'exécutable pour vous assurer que les informations de débogage est pas pris en compte.
  3. Vérifiez la taille réelle du code (.text), et non la taille du fichier. Peut-être il y a un rembourrage en cours. Vous pouvez utiliser objdump pour cela.
  4. Vider le code assembleur (commutateur -S) et vérifier qu'il produit en fait des instructions de bras dans un cas, et le pouce dans un autre.

Avec certains compilateurs, le pouce est la valeur par défaut lors de la compilation pour ARMv7. Etes-vous sûr que votre exécutable d'origine n'a pas été construit pour le pouce?

Essayez de construire avec -mno-pouce et voir si l'augmentation de la taille du code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top