Plus de GCC lien des problèmes de temps: undefined reference to principal
Je suis d'un logiciel d'écriture pour un Cortex-A8 processeur et j'ai à écrire des BRAS de montage code d'accès à des registres. Je suis en train de faire utiliser les compilateurs gnu et liée à l'outil chaînes, ces outils sont installés sur la carte processeur(Freescale je.MX515) avec Ubuntu. - Je faire un lien à partir de mon PC(Windows) à l'aide de WinSCP et PuTTY terminal.
Comme d'habitude, j'ai commencé avec un simple C le projet de principal.c et fonctions.s. Je compiler le principal.c à l'aide de GCC, assembler les fonctions.s à l'aide de comme et lien les objets générés les fichiers en utilisant une fois de plus GCC, mais j'obtiens des erreurs étranges au cours de ce processus.
Une constatation importante -
Pendant ce temps, j'ai découvert que mon code assembleur peut avoir quelques problèmes parce que quand j'individuellement assembler à l'aide de la commande as -o functions.o functions.s
et essayez de lancer le générés fonctions.o à l'aide de ./functions.o
de commande, le shell bash est pas en mesure de reconnaître ce fichier comme un fichier exécutable(en appuyant sur l'onglet fonctions.o n'est pas être sélectionné/Mastic n'est pas en surbrillance le fichier).
Quelqu'un peut-il suggérer ce qui se passe ici? Il n'existe aucun options spécifiques que je dois envoyer, à GCC pendant le processus de liaison? Les erreurs que je vois sont étranges et au-delà de ma compréhension, je ne comprends pas ce que le GCC se réfère.
Je suis coller ici le contenu de la principale.c, fonctions.s, le Makefile et la liste des erreurs.
Aider, s'il vous plaît!!!
Dernières erreurs après la makfile a été édité comme suggéré par les gars ici -
ubuntu@ubuntu-desktop:~/Documents/Project/Others/helloworld$ make
gcc -c -mcpu=cortex-a8 main.c
as -mcpu=cortex-a8 -o functions.o functions.s
gcc -o hello main.o functions.o
functions.o: In function `_start':
(.text+0x0): multiple definition of `_start'
/usr/lib/gcc/arm-linux-gnueabi/4.3.3/../../../crt1.o:init.c:(.text+0x0): first defined here
collect2: ld returned 1 exit status
make: *** [hello] Error 1
principal.c
#include <stdio.h>
#include <stdlib.h>
int main(void) {
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
return EXIT_SUCCESS;
}
fonctions.s
* Main program */
.equ STACK_TOP, 0x20000800
.text
.global _start
.syntax unified
_start:
.word STACK_TOP, start
.type start, function
start:
movs r0, #10
movs r1, #0
.end
Makefile
all: hello
hello: main.o functions.o
gcc hello -o main.o functions.o
-- bonjour a inclus ici, après avoir suggéré ici par des mecs à stackoverflow, mais le problème persiste toujours, j'obtiens toujours la même erreur.
main.o: main.c
gcc -c -mcpu=cortex-a8 main.c
functions.o: functions.s
as -mcpu=cortex-a8 -o functions.o functions.s
Erreurs
ubuntu@ubuntu-desktop:~/Documents/Project/Others/helloworld$ make
gcc -c -mcpu=cortex-a8 main.c
as -mcpu=cortex-a8 -o functions.o functions.s
gcc -o main.o functions.o
functions.o: In function `_start':
(.text+0x0): multiple definition of `_start'
/usr/lib/gcc/arm-linux-gnueabi/4.3.3/../../../crt1.o:init.c:(.text+0x0): first defined here
/usr/lib/gcc/arm-linux-gnueabi/4.3.3/../../../crt1.o: In function `_start':
init.c:(.text+0x30): undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [hello] Error 1
init.o
est implicitement liée, et qui contient déjà le symbole _start
. C'est probablement un problème différent cependant de l'absence de main()
.Clifford j'ai fait les modifications dans le fichier makefile, mais d'avoir des erreurs concernant l'init, je ne sais pas comment. 🙁 J'ai une très grosse demande sur ce forum sans aucun problème, ce problème a commencé quand j'ai inclus le code assembleur.
OriginalL'auteur HaggarTheHorrible | 2010-04-19
Vous devez vous connecter pour publier un commentaire.
Dans le makefile:
devrait être:
Comme il est, vous le liez fonctions.o, mais pas le principal.o, et produisant une sortie exécutable appelé main.o, qui est d'écraser le principal existant.o.
_start': (.text+0x0): multiple definition of
_start' /usr/lib/gcc/arm-linux-gnueabi/4.3.3/../../../crt1.o:init.c:(.texte+0x0): d'abord défini ici collect2: ld a retourné 1 code de sortie make: *** [bonjour] Erreur 1Modifier les nouvelles informations dans votre question. Il me semble que si la RT bibliothèque est la définition de la _start.
Neil j'ai inclus dans la nouvelle liste d'erreurs, l'init est en quelque sorte chargé, je ne sais pas comment.
OriginalL'auteur
Ne devrait pas
être
OriginalL'auteur codaddict
Comme Bigbohne suggère, gcc est tenté de faire le lien dans le standard de la bibliothèque d'exécution. Essayez d'ajouter le -nostdlib option à votre appel de gcc:
OriginalL'auteur tikiboy
Je pense que cela a quelque chose à voir avec la bibliothèque d'Exécution de la gcc est un lien à la fin.
Et dans ce de la bibliothèque il y a déjà une "_start".
Je pense que vous devez compiler sans "std bibliothèque". mais que vous n'avez pas de printf,getchar et toutes les autres choses utiles.
OriginalL'auteur Bigbohne