2010-05-03 20 views
4

我正在處理一個包含大約30個源文件(.c)的C項目。我正在使用GNU工具在運行在Ubuntu上的32位微控制器(i.MX515)上構建此項目。函數`_start':init.c :(。text + 0x30):未定義的`main'引用

編譯階段成功完成,但是當連接過程開始我得到這個錯誤(對於完全錯誤的quesiton結束)

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

我有一個main()功能,做一個簡單的printf()

我的用於鏈接的Makefile行,看起來像這樣。

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) 

幫助!!!

問候

維克拉姆


完整的鏈接錯誤

/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

main.c(編譯爲main.o)中的main()? – 2010-05-03 13:20:53

回答

8

最終依賴於main.o(和一堆別人的),但是,你的makefile正在採取所有的「其他」,並在main.o中輸出它們(這是-o確實在大多數編譯器)

編輯你的連接線到:-o final $(OBJDIR)/main.o

+0

嗨凱文,是的!我的makefile是錯誤的,我介紹了你的建議和工作。我經常犯這個錯誤,當我通過我的一個非常老的makefile時,發現我在鏈接命令行中有 - 「$(CC)$(LFLAGS)-o $ @」。那麼,在這兩種情況下最終都會產生。謝謝!!! – HaggarTheHorrible 2010-05-03 13:49:30

+0

不客氣,這就是爲什麼另一雙眼睛幾乎總是立即發現問題 - 他們不知道要「跳過」什麼;) – KevinDTimm 2010-05-03 13:59:05

3

接頭不能找到用於在其中限定具有主源()中的目標代碼。可能它沒有被編譯。檢查其中有main()的30個文件中的哪個文件正在被編譯爲.OBJ。

+0

嗨RM,是的,你是對的。我的main.c的目標文件沒有被生成,因爲我的makefile中有一個錯誤,我修正了它,現在我的最終生成了。謝謝!!! – HaggarTheHorrible 2010-05-03 13:49:14