簡體   English   中英

鏈接器是否查找頭文件

[英]Does the linker look for the header file

編譯 C 源文件時,我們使用#include "myheader.h"包含頭文件。

預處理器會在編譯文件之前擴展這個頭文件。 但是,它是如何准確找到這個頭文件的呢? 我相信,頭文件的路徑作為參數傳遞給鏈接器,使用-I例如到 gcc。

我一直認為鏈接器只在編譯后運行。 那么鏈接器是否實際運行之前,以查找諸如頭文件之類的內容,以及在編譯以組合各種目標文件等之后? 謝謝

頭文件主要聲明元符號,以及允許編譯器匹配/檢查函數的交叉編譯單元調用的函數原型。

鏈接器感興趣的所有實際符號都在 C 文件中定義。 編譯器可以在代碼生成期間使用預處理器符號 (#defines),但它們隨后會被內聯到生成的代碼中。

同樣,在 C++ 內聯方法或模板的情況下,代碼由編譯器在使用它們的地方生成。

這意味着鏈接器不需要頭文件中的任何內容,編譯器已經將需要的任何內容處理到生成的代碼流中(到匯編程序或目標文件編譯器輸出)。

所以不,包含文件與鏈接器無關。

下面是從源代碼到可執行文件的精簡版本。

+-------------------------------+
| sources (typical .c/.h files) |
+-------------------------------+
               |
               V
         pre-processor
               |
               V
+-------------------------------+
|     intermediate sources      |
+-------------------------------+
               |
               V
           compiler
               |
               V
+-------------------------------+
|       object files (.o)       |
+-------------------------------+
               |
               V
            linker
               |
               V
+-------------------------------+
| executables/shared libraries  |
+-------------------------------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM