2013-04-26 70 views
5

我試圖獲得答案時遇到了this。但是,看起來海報有多個文件,而且他們沒有鏈接,因此錯誤。`未定義在Cpp類中主要`main`的引用()

但是,使用單個文件時爲什麼會出現此錯誤?

g++ myClass.cpp 
/usr/lib/gcc/i686-redhat-linux/4.6.3/../../../crt1.o: In function `_start': 
(.text+0x18): undefined reference to `main' 
collect2: ld returned 1 exit status 

爲什麼是必要main這裏在編譯時(從那裏它發現的主要在我的代碼一提的)? main是代碼執行的起點,但爲什麼編譯器假定我需要main這裏。我可以在其他文件中定義它並使用gcc -o來生成可執行文件?

或者我錯過了導致錯誤的代碼中的其他東西?

#include<iostream> 
class myClass 
{ 

public: 
myClass() 
{ 
    std::cout<<"Constructor"; 
} 

~myClass() 
{ 
    std::cout<<"Destructor";  
} 

}; 

回答

5

main不需要編譯源文件。有必要將程序鏈接到可執行程序[1],因爲程序必須從某處啓動。

你需要告訴編譯器說:「這不是我的整個程序,只需編譯,但不鏈接」,使用「-c」選項,這樣

g++ -c myClass.cpp 

將產生一個myClass.o文件,你可以稍後使用,例如

g++ -o myprog myClass.o myOtherClass.o something_that_has_main.o -lsomelib 

(顯然,無論你在你的項目替代名稱)

[1]假設你使用普通的鏈接器scrips附帶的編譯器。 「也有辦法」,但我認爲這超出了這個答案。

7

您正在嘗試編譯可執行文件,因此需要使用main函數。您應該使用-c標誌編譯的目標文件:

g++ -c myClass.cpp 

當你在的話,我建議至少是添加警告標誌-Wall -Wextra

1

您正在將您的源代碼構建爲應用程序。添加-c選項只產生目標文件:

g++ -c myClass.cpp 
1

只編譯?!使用-c選項

g++ -c file.cpp 

否則項目需要一個main

1

您需要使用-c標誌進行編譯,並且只告訴編譯器生成一個目標文件。你告訴編譯器創建一個可執行文件。

相關問題