web-dev-qa-db-fra.com

exit.c :(.. text + 0x18): référence non définie à _exit lors de l'utilisation de arm-none-eabi-gcc

Je suis nouveau dans le domaine des microcontrôleurs. Je dois porter un IDE qui compile des programmes pour les microcontrôleurs AVR afin de compiler des programmes pour les microcontrôleurs ARM. Je viens de remplacer le compilateur d’AVR par ARM et d’ajouter quelques options, comme l’a dit 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 

Lorsque je l'exécute, l'erreur suivante est générée:

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

Puis-je obtenir de l'aide sur ce qu'est cette erreur et comment puis-je la résoudre? Et aussi je ne sais pas ce que ces options dans la ligne de commande spécifient.

32
Sharath U

Cela se produit lors de la compilation d'un fichier avec arm-none-eabi-gcc sur une machine/architecture pour le charger sur une machine cible ARM. Très probablement, vous ne faites pas usage de semi-hébergement, vous voulez recibler.

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 utiliser les fonctionnalités d'entrée/sortie sur un ordinateur hôte qui exécute 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ébergement/reciblage

Si vous utilisez retarget, créez un lien comme suit: $ arm-none-eabi-gcc --specs = nosys.specs $ (OTHER_LINK_OPTIONS)

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

52
Yeke

Utilisez --specs=nosys.specs:

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

Référence:

33
ele1000

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 de l’éditeur de liens.
0
User Human