1. 程式人生 > >GCC/C++ 編譯過程

GCC/C++ 編譯過程

cat main.o

(4)連線目的碼,生成可執行程式

g++ main.o -o main //生成的可執行程式名為main ,如果執行命令 g++ main.o  這樣預設生成a.out,也就是main與a.out是一個只是名字不同而已
下面是main檔案的一部分:
ls

./main

在成功編譯之後,就進入了連結階段。在這裡涉及到一個重要的概念:函式庫(可以這麼理解就是不帶main()函式的.cpp生成的)。

讀者可以重新檢視這個小程式,在這個程式中並沒有定義”cout”的函式(準確說cout不是函式,cout卻很獨特:既不是函式,似乎也不是C++特別規定出來的像if,for一類有特殊語法的“語句”,其實說到底還是函數呼叫

,不過這函式有些特殊,用的是運算子過載,確切地說是過載了“<<”運算子。這裡如果用pritf()函式說明會更好,暫且當做函式理解吧)實現,且在預編譯中包含進的”iostream”中也只有該函式的宣告,而沒有定義函式的實現,那麼,是在哪裡實現”cout”函式的呢?系統把這些函式實現都被做到名為stdc++的庫檔案中去了,在沒有特別指定時,g++會到系統預設的搜尋路徑”/usr/lib”下進行查詢,也就是連結到stdc++庫函式中去,這樣就能實現函式”cout”了,而這也就是連結的作用。