2012-06-04 48 views
7

我遇到了這個問題,當GCC編譯器連接兩個對象文件時,它似乎失敗了。目標文件foo1.ccfoo2.cc都包括名爲foo1.hh的頭文件中的類。此外,頭文件foo.hh還有一個對象實例的外部聲明,該對象實例出現在foo1.cc中。如何使用相同的頭文件在C++中編譯和鏈接目標文件?

應該注意的是,頭文件foo.hh只會在兩個源文件foo1.ccfoo2.cc之間定義一次。

當我編譯使用以下命令的源文件,一切似乎工作:

g++ foo1.cc foo2.cc 

上面的命令會產生所謂的a.out的可執行文件。

當我嘗試將源文件編譯成目標文件獨立:

g++ -c foo1.cc 
g++ -c foo2.cc 
g++ -o foo1.o foo2.o 

GCC編譯器抱怨有在foo2.cc到功能未定義的引用。這些功能應在foo1.cc中定義;但是,鏈接器不承認這一點。

我想知道是否有辦法用GCC編譯器解決這個問題。

+0

歡迎來到SO!一定要接受最有幫助的答案。 – jncraton

+0

你應該接受一個答案。 – Walter

回答

8

沒有問題,你的gcc語法有錯誤。

g++ -c foo1.cc 
g++ -c foo2.cc 
g++ -o foo foo1.o foo2.o 

-o參數接受的輸出文件名,所以你的情況,它會覆蓋foo1.o具有聯動的結果。

3

你的最後一個命令是鏈接命令,它說:用foo2.o創建一個可執行文件並命名可執行文件foo1.o.鏈接器可能無法找到創建可執行文件所需的所有信息,因爲您的意圖是同時使用foo1.o和foo2.o.只需完全忽略-o標誌:

g++ foo1.o foo2.o 
相關問題