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
Le journal de l'suggère que vous ciblez Linux. Est-ce intentionnel ou avez-vous l'intention d'un "bare-metal" cible? Il apparaît en ciblant Linux, 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