天天看點

編譯器入門問題

1、什麼是編譯器

  編譯器是一種翻譯程式,作用是将一種計算機語言翻譯成另一種計算機語言。将進階語言如C翻譯成低級語言如彙編或機器碼叫編譯,反之則稱反編譯。 

2、什麼是解釋器

  解釋程式是一種把進階程式設計語言直接運作的轉譯程式。解釋器不會一次把整個程式轉譯出來。它每轉譯一行程式叙述就立刻運作,然後再轉譯下一行,再運作,如此不停的進行下去。

  HOW?有哪些例子?

3、什麼是目标檔案(中間代碼)

  目标檔案從結構上講,它是已經編譯後的可執行檔案格式,隻是還沒有經過連結的過程,其中可能有些符号或有些位址還沒有被調整。其實它本身就是按照可執行檔案格式存儲的,隻是跟真正的可執行檔案在結構上稍有不同。

  目标檔案中的内容至少有編譯後的機器指令代碼、資料。沒錯,除了這些内容以外,目标檔案中還包括了連結時所須要的一些資訊,比如符号表、調試資訊、字元串等。一般目标檔案将這些資訊按不同的屬性,以"節"(Section)的形式存儲,有時候也叫"段"(Segment)

4、編譯過程有哪些

  編譯器的編譯過程通常有:詞法分析、預處理、解析、文法分析、代碼生成以及代碼優化。

  一般從源代碼生成PE檔案的過程有:  源代碼 (source code) → 預處理器 (preprocessor) → 編譯器 (compiler) → 彙程式設計式 (assembler) → 目标代碼 (object code) → 連接配接器 (Linker) → 可執行程式 (executables)

5、什麼是交叉編譯

  在一種計算機環境中運作的編譯程式,能編譯出在另外一種環境下運作的代碼,我們就稱這種編譯器支援交叉編譯。這個編譯過程就叫交叉編譯。

  要進行交叉編譯,我們需要在主機平台上安裝對應的交叉編譯工具鍊(cross compilation tool chain),然後用這個交叉編譯工具鍊編譯我們的源代碼,最終生成可在目标平台上運作的代碼。常見的交叉編譯例子如下:

  a、在Windows PC上,利用ADS(ARM 開發環境),使用armcc編譯器,則可編譯出針對ARM CPU的可執行代碼。

  b、在Linux PC上,利用arm-linux-gcc編譯器,可編譯出針對Linux ARM平台的可執行代碼。

  c、在Windows PC上,利用cygwin環境,運作arm-elf-gcc編譯器,可編譯出針對ARM CPU的可執行代碼。

6、有哪些常見編譯器

C的隻知道VC的Nmake,GCC.

7、編譯器輸出的是什麼

  編譯器的輸入叫源代碼,輸出叫目标代碼。 

  典型的編譯器輸出是由包含入口點的名字和位址, 以及外部調用(到不在這個目标檔案中的函數調用)的機器代碼所組成的目标檔案。一組目标檔案,不必是同一編譯器産生,但使用的編譯器必需采用同樣的輸出格式,可以連結在一起并生成可以由使用者直接執行的可執行程式。

8、什麼是編譯工具鍊(toolchain)

指編譯過程中所用到的工具集合,如GNU Assembler "as",  GNU Linker "ld"

The complete set of tools used in the compilation process is referred to as a toolchain.

繼續閱讀