2009-02-15 47 views
17

我有以下代碼:編譯錯誤:未定義的符號: 「_main」,從引用:開始crt1.10.5.o

#include <iostream> 

using namespace std; 

class testing{ 
    int test() const; 
    int test1(const testing& test2); 
}; 

int testing::test() const{ 
    return 1; 
} 

int testing::test1(const testing& test2){ 
    test2.test(); 
    return 1; 
} 

編譯後,它給了我下面的錯誤:

Undefined symbols: 
    "_main", referenced from: 
     start in crt1.10.5.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

爲什麼它抱怨主要?我不能在另一個文件中聲明main幷包含這個文件嗎?

非常感謝!

回答

22

您試圖鏈接已經是:

g++ file.cpp 

不僅會編譯它,但嘗試已經創建可執行文件。鏈接器然後無法找到它需要的主要功能。嗯,這樣做:

g++ -c file.cpp 
g++ -c hasmain.cpp 

這將創建兩個文件file.o和hasmain.o,兩者都只編譯到目前爲止。現在,您可以使用g ++它們關聯起來:

g++ -omy_program hasmain.o file.o 

它會自動找出那些已經編譯的文件,並調用鏈接它們來創建一個文件「MY-」,這是你的可執行文件。

1

如果您在另一個文件中聲明主函數,則必須分別編譯這兩個文件,然後將它們鏈接到1個可執行文件中。

除非你從包含主函數的文件中包含文件的全部內容,否則這也可以工作,雖然有點奇怪。但是,如果你這樣做,那麼你必須確保你編譯具有main()函數的文件。

相關問題