什麼是編譯器、連接器、程式庫?

編譯器 Compiler

在前一章我們講到,C++這個語言需要透過編譯器 (compiler) 來翻譯成機器語言,好讓電腦能夠理解我們的指令。

而在一個應用程式中,我們常常會寫很多C++檔案 (.cpp),每個檔案都有著不同的目的。

舉例來說,當我們在寫一個模擬自駕車的程式,可能有一個 .cpp 是負責規劃路徑的,另一個 .cpp 則是負責做車子定位的。

我們可以給每一個檔案取一個適當的檔名,這麼一來,我們就可以很清楚的透過檔名知道每一個 .cpp 的用途。比如說 PathPlanning.cpp、Localization.cpp 等等。

而編譯器的工作,就是把這些 .cpp 轉為目標文件 (object file),這些目標文件通常都和原本的 .cpp 有著相同的檔案名稱,不同的是目標文件是 .o 或是 .obj 結尾。

所以,上面的檔案經過編譯後,就會出現 PathPlanning.o、Localization.o 這兩個檔案。

連接器 Linker

在編譯器產生出各個目標文件後,連接器的主要功能就是將這些目標文件“連接”起來,並產生一個執行檔 (executable)。這個執行檔,就是你最後要執行的程式。

然而,連接器還有一個重要的功能,也就是它能夠連接程式庫 (library)。

程式庫 Library

程式庫就是一系列已經幫你準備好的程式碼供你使用,你唯一要做的,就是把它引進你的 .cpp。

而 C++ 提供了所謂的標準程式庫 (standard library),其中涵蓋了大量常常使用到的程式庫。而其中一個常見的程式庫就是 ,他主要就是提供使用者輸入及輸出的功能。只要引進這個程式庫,使用者就不需要再另外寫一個介面了。

你會看到程式庫被這樣引用:

#include <iostream>

以下的示意圖可以讓你們更理解編譯器、連接器、程式庫彼此之間的關係

總結

在這章中,我們了解到電腦還需要額外的工具才能理解我們打出來的程式碼,包括編譯器、連接器、以及程式庫。也討論了各個工具的用途。

希望透過這章你們可以對電腦如何理解程式語言有一層更深的理解!