C 編譯器與聯結器區別

2021-06-28 12:57:38 字數 506 閱讀 3947

編譯:編譯器對源**進行編譯,是將以文字形式存在的源**翻譯為機器語言形式的目標檔案的過程。

編譯單元:對於c++來說每乙個cpp檔案就是乙個編譯單元。各個編譯單元之間是互相不可知的。

編譯器就是把我們寫的原始檔翻譯成機器**,聯結器以編譯器的輸出作為輸入,生成可執行檔案。

因為編譯器的編譯單元只是單獨的每個cpp,所以有些跨檔案的東西它沒法處理,比如宣告為extern 的變數

(當你需要在乙個c++語言檔案中使用另外乙個c++語言檔案中定義的變數時就需要加上extern來宣告,這樣編譯器就知道這個變數是在別的檔案中定義的)就需要用聯結器來解決。

編譯器把乙個cpp編譯為目標檔案的時候,除了要在目標檔案裡寫入cpp裡包含的資料和**,還要至少提供3個表:未解決符號表、匯出符號表和位址重定向表。未解決符號表提供了所有在該編譯單元裡引用但是定義並不在本編譯單元裡的符號及其出現的位址。匯出符號表提供了本編譯單元具有定義並且願意提供給其他編譯單元使用的符號及其位址。位址重定向表提供了本編譯單元所有對自身位址的引用的記錄。

預處理器,編譯器,彙編器,聯結器

1.2程式被其它程式翻譯成不同的格式 hello程式的生命週期是從乙個源程式 hello.c 稱為高階c語言 開始,被其它程式轉化為一系列的低階機器語言指令,這些指令按照一種稱為可執行目標程式的格式打包好,以二進位制磁碟檔案的形式儲存。例 unix gcc o hello hello.c可以實現原始...

預處理器,編譯器,彙編器,聯結器的概念和區別

好記性不如爛筆頭,所以準備詳細的記錄一下這幾個東西的功能和區別,有例子為證。參考部落格 hello程式的生命週期是從乙個源程式 hello.c 稱為高階c語言 開始,被其它程式轉化為一系列的低階機器語言指令,這些指令按照一種稱為可執行目標程式的格式打包好,以二進位制磁碟檔案的形式儲存。例 unix ...

如何區別FFC聯結器和FPC聯結器

接器領域中,ffc聯結器和fpc聯結器常常讓人混淆。雖然兩者都是柔性電纜聯結器,但是ffc聯結器以及fpc聯結器還是有一定程度上的區別。柔性扁平電纜 flexible flat cable 聯結器,fpc是柔性印製線路 flexible print circuit 兩者的製造上來講,他們線路形成的方...