目錄
1.gcc的基本使用
2.Linux下的靜态庫和動态庫的了解
3.Linux項目自動化建構工具——make/makefile
1.gcc的基本使用
gcc是專門用來編譯c語言的
g++是專門用來編譯c++的,但是g++也能夠用來編譯c語言
預處理(進行宏替換)
預處理功能主要包括宏定義 , 檔案包含 , 條件編譯 , 去注釋等。 預處理指令是以 # 号開頭的代碼行。 執行個體: gcc –E hello.c –o hello.i 選項 “-E”, 該選項的作用是讓 gcc 在預處理結束後停止編譯過程。(也就是隻預處理完就停止) 選項 “-o” 是指目标檔案,“.i”檔案為已經經曆過預處理的c原始程式。(生成的檔案是預處理後的檔案) 編譯(生成彙編) 在這個階段中 ,gcc 首先要檢查代碼的規範性、是否有文法錯誤等 , 以确定代碼的實際要做的工作 , 在檢查無誤後,gcc 把代碼翻譯成彙編語言。 使用者可以使用 “-S” 選項來進行檢視 , 該選項隻進行編譯而不進行彙編 , 生成彙編代碼。 執行個體:gcc –S hello.i –o hello.s 彙編(生成機器可識别代碼) 彙編階段是把編譯階段生成的 “.s” 檔案轉成目标檔案 讀者在此可使用選項 “-c” 就可看到彙編代碼已轉化為 “.o” 的二進制目标代碼了 執行個體:gcc –c hello.s –o hello.o 連接配接(生成可執行檔案或庫檔案) 在成功編譯之後 , 就進入了連結階段。 執行個體:gcc hello.s –o hello.o 或者直接:gcc hello.s 會生成一個a.out檔案
2.Linux下的靜态庫和動态庫的了解
g++的基本使用過程和gcc一樣
談談連結:
Linux下已經攜帶了語言級别的頭檔案和語言對應的庫。
庫分為兩種(庫的本質也是一個檔案)
linux下劃分的
1.靜态庫
labXXXX.a
2.動态庫
labXXX.so
windows下劃分:
1.靜态庫(xxxx.lab)
2.動态庫(xxxx.dll)
我們用的指令很大一部分是用c寫的
如何看待指令呢?
指令就是程式,工具。指令,程式,工具其實就是一回事。
1.庫分為靜态庫(專門讓編譯器,對使用者的程式進行靜态連結的)和動态庫(專門讓編譯器,對使用者的程式進行動态連結的)
2.靜态庫和靜态連結:連結的時候,如果是靜态連結,找到靜态庫,拷貝靜态庫中我所需要的代碼到我自己的的可執行程式中。
3.動态庫和動态連結:連結的時候,如果是動态連結,找到動态庫,拷貝動态庫中我所需要的代碼的位址到我自己的可執行程式中的相關位置。
4.靜态連結成功:我們的程式,不依賴任何庫,自己就可以獨立運作
5.動态連結成功:我們的程式,還是依賴動态庫,一旦動态庫缺失,我們的程式無法運作。
6.靜态庫:因為自身拷貝的問題,比較浪費空間
7.動态庫:因為可以做到被大家共享方法,是以真正的實作永遠是在庫中,程式内部隻有位址,比較節省空間。
8.靜态庫vs動态庫:Linux系統預設的是動态庫和動态連結
3.Linux項目自動化建構工具——make/makefile
1.make是一個指令
m(M)akefie是一個檔案——在目前的源代碼路徑下
2.規則
makefile是一個圍繞依賴關系和依賴路徑建構的一個自動化編譯的工具
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLjBzMhNTOhJjZmhDZyI2M5ETYxQzNmJWY2gjM3kDM2AzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
以上隻是簡單的makefile的使用