MakeFile從入門到精通 2

2021-09-19 12:48:33 字數 1236 閱讀 5945

程式的編譯與連線:

軟體的底層構造系統:

1,程式儲存與執行

2,程式編譯和連線

3,程式檔案的分類

4,動態庫與靜態庫

計算機基本都遵循馮諾伊曼結構,cpu   記憶體ram(ddr記憶體條) 固態硬碟(嵌入式就是flash   nor nand  )    一般手機平板呼叫 pc 伺服器基本都遵循。主要是這三塊組成。一般啟動過程都是再固態硬碟載入到記憶體接著cpu一條一條去執行了。cpu很傻的。 好處就是快。

儲存與執行:**段 ,資料段,....有時間看看「程式設計師的自我修養講的比較清楚」。

程式的編譯與連線:源**-》預處理-》編譯器-》彙編**-》目標**-》聯結器-》可執行檔案

注意:聯結器可以講目標**搞成庫檔案或者目標**或者可執行檔案

bin:就是說純碎可執行的如微控制器燒錄可以直接載入執行了的,一般的mdk 整合環境就生成bin檔案。

可執行檔案的分類:  bin檔案   elf檔案

elf:可執行可連線的格式檔案,linux系統一般執行這種檔案,當我們載入乙個程式開闢乙個程序空間,不像裸機微控制器我們編譯的時候就從0x30008000開始,但是我們編譯的elf不用設定,elf都有頭部資訊存放的資訊載入到那個位址去執行,當我們執行作業系統有載入器去執行了 。這就是與bin的區別。

elf:又分為三類,可執行檔案,可重定位檔案,共享庫檔案。

其實我們還可以看執行檔案的頭部資訊:readelf  -h  helllo   比較重要的就是entry   point  address  入口位址,就是告訴我們這個頭部裡面當程式執行要載入到**。然後再跳到這裡去執行。

可重定位:就是類似指標,比如main函式就是符號表位址,當我們執行的時候根據符號表找到函式**。可重定位檔案比如*.o檔案都是可重新定位的目標檔案裡面很多函式,函式的符號表還沒有位址都是相對於0的位址。可以重定位可組裝的。

庫檔案:目標檔案的歸檔  ,後面講其實也可以重定位, 靜態庫.a   動態庫.so 。

可以用file  hello   可以看看檔案型別。

也可以看頭部readelf -h  ***.so     入口位址是0 所以庫也可以重定位。

動態庫:用到時候講動態庫與可執行檔案都載入到記憶體裡面了,其他程序都可以使用節省了記憶體空間了。

靜態庫:是直接打包到可執行檔案,用了再可執行檔案裡面了,**已經包含在可執行檔案裡面了。

大致了解一下編譯連線概念。

MakeFile從入門到精通 4

makefile 變數 變數在makefile中大量使用,使得makefile更加靈活功能更加強大。同時造成了讀makefile更加難讀。所以我們要發點時間學學變數。變數基礎 變數分類 變數追加,條件賦值 目標變數 模式變數 自動變數 系統環境變數 變數傳遞 一般在makefile裡面的變數都是存的...

MakeFile從入門到精通 6

庫的生成和使用 庫 其實就是目檔案的乙個歸檔,在前面我記得大致提過了乙個簡單介紹也記錄部落格了,可以返回去看看。目標檔案可以封裝成乙個庫。這裡我就學習如何使用命令把乙個原始檔封裝成乙個庫以及如何去使用。以及如何去編寫乙個makefile去生成庫和使用庫 先學習一下如何使用命令去生成乙個庫 編寫乙個h...

電源拓撲從入門到精通 2

from 上期答案揭曉 答案上圖 c 下圖 a 小夥伴們答對了嗎?ytdfwangwei 我的笨辦法 source,源的意思,就是提供電流。所以,只要是電流流出,就是source。不知道是否正確?完全正確。sink 和 source 是在電路中經常出現的兩個詞。source 源,比如電源,源總是提供...