2013-04-09 35 views
16

我已閱讀關於此主題的其他答案,不幸的是他們沒有幫助我。我試圖幾個C程序連接在一起,而我的迴應得到一個錯誤:C鏈接錯誤:undefined引用'主'

$ gcc -o runexp.o scd.o data_proc.o -lm -fopenmp 
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o: In function `_start': 
(.text+0x20): undefined reference to `main' 
collect2: ld returned 1 exit status 
make: * [runexp] Error 1 

我恰好有一個主要功能,它是在runexp。形式是

int main(void) { 
    ...; 
    return 0; 
} 

任何想法爲什麼我可能會得到這個錯誤?謝謝!

+0

是在全球範圍內的這個功能? – 2013-04-09 14:48:57

+4

你的GCC命令不包含runexp.c,它輸出爲runexp.o - 確定你使用main方法包含源文件? – 2013-04-09 14:49:42

回答

18

您應該在-o選項後提供輸出文件名。在你的情況下,runexp.o被視爲輸出文件名,而不是輸入目標文件,因此你的main函數是未定義的。

+1

或者只刪除'-o'選項並使用傳統的'./a.out',這是一個很美的名字;) – 2014-08-05 22:42:58

3

編譯時,您不包括包含main()的C文件,因此鏈接器沒有看到它。

您需要添加它:

$ gcc -o runexp runexp.c scd.o data_proc.o -lm -fopenmp 
1

您正在運行以下命令覆蓋目標文件runexp.o

gcc -o runexp.o scd.o data_proc.o -lm -fopenmp 

事實上,-o對於輸出文件。 你需要運行:

gcc -o runexp.out runexp.o scd.o data_proc.o -lm -fopenmp 

runexp.out將是你的二進制文件。

0

一般來說編譯通過以下方式最.c文件:

的gcc -o的foo.c FOO。它可能會根據您使用的#includes或您是否有任何外部.h文件而有所不同。一般來說,當你有一個C文件,它看起來有點像下面這樣:

#include <stdio.h> 
    /* any other includes, prototypes, struct delcarations... */ 
    int main(){ 
    */ code */ 
} 

當我得到一個「未定義參考主」,這通常意味着我有沒有int main()在.c文件文件。如果你第一次學習Java的,這是因爲在Java中的困惑可以理解的方式,你的代碼通常如下所示:

//any import statements you have 
public class Foo{ 
    int main(){} 
} 

我會建議想看看如果你在頂部有int main()