2010-05-03 6 views
4

Je travaille sur un projet C avec environ 30 fichiers source (.c). Je construis ce projet sur un micro-contrôleur 32 bits (i.MX515) fonctionnant sous Ubuntu en utilisant les outils GNU.Dans la fonction `_start ': init.c :(. Text + 0x30): référence non définie à` main'

La phase de compilation se termine avec succès, mais lorsque le processus de liaison commence-je obtenir cette erreur (Pour toute erreur complète à la fin de la quesiton):

In function `_start': init.c:(.text+0x30): undefined reference to `main' 

J'ai une fonction main() qui fait simple printf().

Ma ligne Makefile pour la liaison, ressemble à ceci.

final: $(OBJDIR)/main.o $(OBJDIR)/TchClaKnn_BuildKdtreeInt.o $(OBJDIR)/TchClaKnn_FreeKdtreeInt.o.... (Go upto 30 files like this) 
    @echo ".Linking" 
    $(CC) $(LFLAGS) -o $(OBJDIR)/main.o $(OBJDIR)/TchClaKnn_BuildKdtreeInt.o $(OBJDIR)/TchClaKnn_FreeKdtreeInt.o..... (Go upto 30 files like this) 

Aidez-moi !!!

Cordialement

Vikram


complète erreur de liaison

/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[1]: *** [final] Error 1 
make[1]: Leaving directory `/home/ubuntu/Documents/Project/IMX_Project_v1' 
make: *** [all] Error 2 
+0

Est main() dans main.c (compilé à main.o)? –

Répondre

8

finale dépend main.o (et un tas d'autres), mais votre makefile prend toutes les « autres » et les sortir en main.o (c'est ce que -o fait dans la plupart des compilateurs)

modifier votre ligne de lien à: -o final $(OBJDIR)/main.o

+0

Salut Kevin, OUI !!! Mon makefile était erroné, j'ai présenté ce que vous avez suggéré et cela a fonctionné. Je fais cette erreur assez souvent, quand je suis passé par un de mes vieux makefile, je vois que j'avais - "$ (CC) $ (LFLAGS) -o $ @" dans la ligne de commande de liaison. Eh bien, dans les deux cas, la finale est générée. Je vous remercie!!! – HaggarTheHorrible

+0

Vous êtes les bienvenus, c'est pourquoi un autre groupe d'yeux trouve presque toujours le problème immédiatement - ils ne savent pas quoi 'sauter';) – KevinDTimm

3

L'éditeur de liens ne peut pas trouver le code objet pour la source qui a main() sont définies. Probablement que ce n'est pas compilé. Vérifiez que celui des 30 fichiers contenant le fichier main() est compilé en .OBJ.

+0

Bonjour RM, oui vous aviez raison. Le fichier objet de mon fichier main.c n'était pas généré, parce que j'avais une erreur dans mon makefile, je l'ai corrigé et maintenant mon fichier final est généré. Je vous remercie!!! – HaggarTheHorrible