à la sortie.c:(.texte+0x18): undefined reference to `_exit' lors de l'utilisation d'arm-none-eabi-gcc
Je suis nouveau dans le domaine des microcontrôleurs. J'ai besoin d'un port IDE qui est de la compilation de programmes pour les microcontrôleurs AVR pour compiler des programmes pour les microcontrôleurs ARM. J'ai juste remplacé le compilateur AVR BRAS et ajouté quelques options comme dit par quelqu'un.
Voici la commande:
\ARM-GCC\bin\arm-none-eabi-gcc -O0 -ffunction-sections -Wall -std=gnu99 -mfloat-abi=soft
-Wa,-adhlns="[email protected]" -fmessage-length=0 -mcpu=cortex-m0 -mthumb -g3 -gdwarf-2 -Wl,
--gc-sections -o <Dir_name>\Build_Files\Blink_arm.cpp.elf <Dir_name>\Build_Files\Blink_arm.cpp.o <Dir_name>\Build_Files\core.a
-L<Dir_name>\Build_Files -lm
Quand je l'execute, je reçois le prédécesseur d'erreur:
tools/arm-gcc/bin/../lib/gcc/arm-none-eabi/4.6.2\libc.a(lib_a-exit.o): In function `exit':
exit.c:(.text+0x18): undefined reference to `_exit'
collect2: ld returned 1 exit status
Peut-on obtenir de l'aide sur ce qu'est cette erreur et comment la résoudre. Et aussi je ne sais pas ce que ces options dans la ligne de commande spécifiez.
- dans le BRAS de la libc (qui est fourni avec votre compilateur), le
exit()
fonction effectue un appel à_exit()
, ce qui n'est pas défini dans n'importe quelle bibliothèque. votre compilateur doit être configuré de manière incorrecte, bien que vous pourriez réaliser une solution rapide par définitionvoid _exit(int status)
vous-même (NOTE: cela ne fonctionne pas est votre libc déclare _exit() avec une signature différente. votre_exit()
pourrait tout simplement arrêter dans une boucle infinie comme son AVR homologue. la fixation de votre installation de GCC serait l'option recommandable. - Voir: newlib syscalls, vous avez besoin pour mettre en œuvre ces, si elles ne sont pas mises en œuvre par votre conseil d'administration. Aussi, il peut y avoir des problèmes avec votre code. Newlib ne prend pas en charge tout; Voir Gatliff de newlib vue d'ensemble.
Vous devez vous connecter pour publier un commentaire.
Ce qui se passe lors de la compilation d'un fichier avec
arm-none-eabi-gcc
dans une machine/de l'architecture afin de le charger dans un BRAS de la machine cible. Plus que probablement vous n'êtes pas faire usage de semihosting, vous souhaitez vous réorienter.ARM® Compilateur de la chaîne de la Version 4.1 indique:
De la suite d'outils de readme.txt (sous le dossier
.../gcc-arm-none-eabi-VERSION/share/doc/gcc-arm-none-eabi
):Pour moi
--specs=nosys.specs
était assez 😉Utilisation
--specs=nosys.specs
:Référence:
J'ai eu le même problème.
La solution a été comme suit:
-ffreestanding -flto
dans le compilateur de ligne d'appel.-flto -ffreestanding -nostdlib
dans l'éditeur de liens ligne d'appel.