102 votes

Exit.c: (.text+0x18): référence indéfinie vers `_exit' lors de l'utilisation de arm-none-eabi-gcc

Je suis nouveau dans le domaine des microcontrôleurs. J'ai besoin de transférer un IDE qui compile des programmes pour les microcontrôleurs AVR afin de compiler des programmes pour les microcontrôleurs ARM. J'ai simplement remplacé le compilateur de AVR par ARM et ajouté quelques options comme quelqu'un me l'a indiqué. Voici la commande :

\ARM-GCC\bin\arm-none-eabi-gcc -O0 -ffunction-sections -Wall -std=gnu99 -mfloat-abi=soft 
-Wa,-adhlns="$@.lst" -fmessage-length=0 -mcpu=cortex-m0 -mthumb -g3 -gdwarf-2 -Wl,
--gc-sections -o \Build_Files\Blink_arm.cpp.elf  \Build_Files\Blink_arm.cpp.o \Build_Files\core.a 
-L\Build_Files -lm 

Lorsque je l'exécute je reçois l'erreur suivante :

tools/arm-gcc/bin/../lib/gcc/arm-none-eabi/4.6.2\libc.a(lib_a-exit.o): Dans la fonction `exit':
exit.c:(.text+0x18): référence indéfinie vers `_exit'  
collect2: ld a retourné 1 exit status

Puis-je avoir de l'aide pour comprendre cette erreur et comment la résoudre. Je ne sais pas non plus ce que signifient ces options spécifiées dans la ligne de commande.

119voto

Yeke Points 955

Cela se produit lors de la compilation d'un fichier avec arm-none-eabi-gcc sur une machine/architecture pour le charger dans une machine cible ARM. Très probablement, vous n'utilisez pas le semi-hébergement, vous souhaitez le réorienter.

La chaîne d'outils ARM® Compiler Version 4.1 indique :

Le semi-hébergement est un mécanisme qui permet au code s'exécutant sur une cible ARM de communiquer et d'utiliser les facilités d'entrée/sortie sur un ordinateur hôte exécutant un débogueur.

Dans le fichier readme.txt de la chaîne d'outils (sous le dossier .../gcc-arm-none-eabi-VERSION/share/doc/gcc-arm-none-eabi) :

** non semi-hébergé/réorienté

Si vous utilisez la réorienté, liez comme suit : $ arm-none-eabi-gcc --specs=nosys.specs $(AUTRES_OPTIONS_DE_LIEN)

Pour moi, --specs=nosys.specs était suffisant ;)

88voto

ele1000 Points 881

Utilisez --specs=nosys.specs :

arm-none-eabi-gcc --specs=nosys.specs $(OTHER_LINK_OPTIONS)

Référence :

8voto

User Human Points 81

J'ai eu le même problème. La solution était la suivante :

  • Ajoutez les options -ffreestanding -flto dans la ligne d'appel du compilateur.
  • Et ajoutez les options -flto -ffreestanding -nostdlib dans la ligne d'appel du linker.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X