嵌入式技術學習筆記(三)

2021-10-03 17:30:17 字數 1650 閱讀 6972

linux開發工具

vim(文字編輯器):學會使用和如何配置vim

gcc(編譯器):學會製作動態庫和靜態庫及使用和區別

gdb(偵錯程式):設定斷點,單步執行,除錯記憶體錯誤

make(工程管理器):編寫makefile檔案

vim使用

gcc是編譯器,全稱為gnu cc

1、gcc特點

gcc為gnu工具,是一款交叉編譯器。交叉編譯是指在當前cpu平台下編譯出在其他cpu平台下可執行的**,或者叫在宿主機(pc)上編譯出在目標機(手機,開發板)上可執行的**

預處理所需做的內容:標頭檔案展開、巨集替換、條件編譯

include後使用<>和「」的區別,<>的搜尋路徑為系統的頭檔案目錄(/usr/include) 「」的搜尋路徑為現在當前目錄查詢,找不到再進入系統的頭檔案目錄查詢。

編譯所要做的內容:將預處理檔案編譯成彙編檔案.s

彙編所要做的內容:將彙編檔案編譯生成目標檔案.o

鏈結所要做的內容:建立符號表,生成可執行檔案a.out

gcc常用編譯選項

gcc命令後+ -e表示只進行預處理

gcc命令後+ -i表示指定第三方搜尋路徑,用於搜尋不到標頭檔案的條件下

gcc命令後+ >表示將輸出的內容重新儲存在其他地方

gcc命令後+ -d表示定義巨集

gcc命令後+ -s表示在編譯完成處停下

gcc命令後+ -o表示重新命名可執行檔案

gcc命令後+ -w表示關閉編譯時警告資訊,但該指令不建議使用,有時會關閉一些影響程式執行的資訊

gcc命令後+ -wall開啟編譯時警告資訊

gcc命令後+ -o1(-o2、-o3)表示進行編譯器優化

2、靜態庫和動態庫的製作

庫檔案:儲存函式和變數 特點:儲存的函式與變數,只能使用但看不到其實現

靜態庫:在編譯階段載入,載入指將庫檔案的**載入到原始檔,字尾為.a

動態庫:在執行時載入。字尾為.so

這兩個庫形成的可執行檔案存在區別:

(1)使用靜態庫生成的可執行檔案大於動態庫生成的可執行檔案,導致程式執行占用的記憶體較多

(2)使用靜態庫生成的可執行檔案難以公升級,使用動態庫生成的可執行檔案易於公升級。

(3)使用靜態庫生成的可執行檔案執行速度快,使用動態庫生成的可執行檔案執行速度慢

(4)使用靜態庫生成的可執行檔案容易部署,使用動態庫生成的可執行檔案難以部署

linux庫檔案存放路徑

/lib:存放系統執行所需要的庫

/usr/lib:存放程式執行所需要的庫

如何製作靜態庫

(1)將需要儲存的函式所在的檔案編譯生成目標檔案

(2)靜態庫製作工具:ar ar rcs(不存在就建立,存在就更新)庫名 目標名

(3)靜態庫使用:gcc 原始檔 -i庫名 -l庫存放路徑

如何製作動態庫

gcc -shared -fpic 原始檔 -o libcal.so

使用:cp libcal.so /usr/lib

gcc main.c -lcal

gcc main.c ./libcal.so -o cal

gcc -static作用

此選項將禁止使用動態庫,所以,編譯出來的東西,一般都很大,也不需要什麼動態連線庫,就可以執行。

嵌入式技術學習筆記(六)

學習嵌入式linux系統開發實際上是學習使用者程式設計介面api 1 linux系統開發是指通過核心提供的服務實現相應的功能 linux系統構成 使用者空間,核心空間 2 劃分空間的目的 分成兩個空間是為了防止使用者修改核心中的內容,使得原本應該實現的功能無法實現。為了保護核心中核心資料不發生變化,...

嵌入式學習筆記

嵌入式系統定義 技術角度以應用為中心,以計算機技術為基礎,軟硬體可裁剪,應用系統對功能,可靠性,成本,體積,功耗,和應用環境有特殊要求的專用計算機系統系統角度 設計完成複雜功能的硬體和軟體並使其緊密契合在一起的計算機系統 實時在規定的時間內,完成規定的動作 紅帽linux 基本命令 ls 檢視當前目...

嵌入式學習筆記

1 3 買了兩本書鳥哥的 鳥哥的linux私房菜基礎學習篇 第三版 和偉山東的 嵌入式linux應用開發完全手 冊 暫時看不懂 4 看了王剛的 linux系統移植 第二版 實現了windows和linux虛擬機器的檔案的共享 2014 11 02 主機可以ping通虛擬機器,虛擬機器ping不通主機...