嵌入式Linux_C語言開發工具

C語言開發工具

開發工具和操作系統之間是相互促進的、相互發展的,操作系統離不開軟件開發的支持,軟件開發工具也離不開操作系統這個平臺。Linux操作系統下Linux開發工具的開源方式,可以讓大家擁有更多的資源,得到更多的信息,對軟件工具的發展起到了更大的促進作用。

1、嵌入式Linux C語言開發概述

C語言的特點:

  • C語言具有出色的可移植性,能夠在不同體系結構的軟硬件平臺上運行。
  • C語言具有簡潔緊湊,使用靈活的語法機制,並能直接訪問硬件。
  • C語言具有很高的運行效率。
    所以,很多操作系統的內核,系統軟件等都是使用C語言編寫的。在嵌入式Linux開發領域,C語言同樣是使用最廣泛的語言之一。

2、嵌入式Linux C開發環境

編輯工具:在Linux下編程,你不再擁有集成化環境,你可以使用類似於EDIT的工具——經典vi編輯器來編輯源文件。當然還有很多其他的更高檔一點的。總之,編輯器和編譯器是分開工作的。
編譯工具:在Linux下支持大量的語言,有C、C++、Java等。在使用這些編譯工具時,是使用命令方式的,也就是說,先用編輯工具輸入源程序,然後執行一長串的命令進行編譯。例如“gcc -o hello hello.c”。
調試工具:GDB是GNU開源組織發佈的一個強大的Unix下調試程序工具。或許大家還是喜歡圖形界面的,比如很多IDE的調試。但是在UNIX平臺下,各有所長。
軟件工具:一個大型軟件總是由很多個源程序組成,爲了能夠將大量的編譯命令做一次完成,Linux下提供了make各autoconf的工具分別用於大型軟件的編譯,以及編譯前根據機器當前狀態做相應的配置。
開發工具包:在Linux下提供了很多優秀的GNU C庫函數,Motif函數庫,GTK函數庫、QT函數庫等工具包。
項目管理工具:在Linux下還有CVS這樣優秀的用於版本控制、管理的軟件配置工具。

3、嵌入式文本編輯器

Linux上最常用的文本編輯器就是vi,Linux下一切都是文件,用戶在使用計算機的時候,往往需要創建自己的文件,這些工作都離不開編輯器。
vi是Visual Interface的簡稱,它可以執行輸出、刪除、查找、替換、塊操作等衆多文本操作。
大家需要注意:在vi中沒有排版,不能和word中一樣,對字體字號格式段落進行配置,它只是一個文本編輯器,vi沒有菜單,並且不支持鼠標操作,vi的創造者爲了將程序員的雙手全部放在鍵盤上,所以開發了很多命令。vi有三種基本工作模式:命令行模式、插入模式、底行模式。
當然,vi還有更高級的有vim,即改良版的vi,Vim是從vi發展出來的一個文本編輯器。代碼補全、編譯及錯誤跳轉等方便編程的功能豐富,在程序員中被廣泛使用,和Emacs並列成爲類Unix系統用戶最喜歡的文本編輯器。
在這裏插入圖片描述
(1)基本上 vi/vim 共分爲三種模式,分別是命令模式(Command mode),輸入模式(Insert mode)和底線命令模式(Last line mode)。 這三種模式的作用分別是:
命令模式:
用戶剛剛啓動 vi/vim,便進入了命令模式。控制屏幕光標的移動,字符、行或者字的刪除,移動複製某區段以及進入其他模式。此狀態下敲擊鍵盤動作會被Vim識別爲命令,而非輸入字符。比如我們此時按下i,並不會輸入一個字符,i被當作了一個命令。需要注意的是,這時候移動上下左右,計算機會嗶哩嗶哩叫。

以下是常用的幾個命令:
i 切換到輸入模式,以輸入字符。
x 刪除當前光標所在處的字符。
nx刪除光標後面的n個字符
xX刪除光標前面的n個字符
dd剪切一行
yy複製一行
nyy,ndd分別是複製n行、剪切n行,並且在屏幕下方會提示覆制了多少行。
p粘貼
u撤銷
ctrl+r取消撤銷
G去文章的最後面
gg去文章的最前面
$去光標所在行的行尾
0或者^去光標所在行的行首
w下一個字
b上一個字
ctrl+b屏幕往後翻頁
ctrl+f屏幕往前翻頁
ctrl+u屏幕往後翻半頁
ctrl+d屏幕往前翻半頁
ctrl+g列出光標所在行的行號
需要注意的一點,這裏的yy和dd是將vim裏面的內容複製到緩衝區,並且系統的剪切板,只有右擊複製才能複製到剪切板中,系統的剪切板不等於緩衝區,你這時候右擊粘貼是不能粘貼yy過的內容。

: 切換到底線命令模式,以在最底一行輸入命令。
若想要編輯文本:啓動Vim,進入了命令模式,按下i,切換到輸入模式。
命令模式只有一些最基本的命令,因此仍要依靠底線命令模式輸入更多命令。

輸入模式
在命令模式下按下i就進入了輸入模式。在輸入模式中,可以使用以下按鍵:
字符按鍵以及Shift組合,輸入字符
ENTER,回車鍵,換行
BACK SPACE,退格鍵,刪除光標前一個字符
DEL,刪除鍵,刪除光標後一個字符
方向鍵,在文本中移動光標
HOME/END,移動光標到行首/行尾
Page Up/Page Down,上/下翻頁
Insert,切換光標爲輸入/替換模式,光標將變成豎線/下劃線
ESC,退出輸入模式,切換到命令模式
底線命令模式:
在命令模式下按下:(英文冒號)就進入了底線命令模式。
底線命令模式可以輸入單個或多個字符的命令,可用的命令非常多。
在底線命令模式中,基本的命令有(已經省略了冒號):
q 退出程序
w 保存文件
x保存退出
wq保存退出
q!強制退出(不保存)
set nu 列出行號
/關鍵字 查找按住n後翻,N前翻,查到一個沒有的關鍵字則可以取消高亮
按ESC鍵可隨時退出底線命令模式。

當然了,這些命令用多了就習慣了,一時忘記了可以去百度查看,經常用到的也就那幾個。

4、嵌入式編譯器

1、gcc編譯器
在Linux平臺上,最流行的就是gcc編譯器。
gcc可以爲x86,ARM、MIPS等不同體系結構的硬件平臺編譯程序。
gcc可以編譯C、C++、Java、Pascal等數十種高級語言。
gcc的編譯效率要比其他編譯器高出不少,所以使用的基本上都是gcc編譯系統。

2、gcc命令常用選項和工作流程
gcc的使用格式:
gcc [選項] [文件名] [選項] [文件名]
(1)總體選項:用於控制編譯的整個流程
-c: 對源文件進行編譯或者彙編
-E: 對源文件進行預處理
-S: 對源文件進行編譯
-o: 輸出目標文件
-v: 顯示編譯階段的命令
(2)語言選項:用於支持各種版本的C語言程序
-ansi: 支持符合ANSI標準的C程序
(3)警告選項:用於控制編譯過程中產生的各種警告信息
-W:屏蔽所有的警告信息
-Wall:顯示所有的警告信息
-Werror: 出現任何警告就停止編譯
(4)調試選項:用於控制調試信息
-g: 產生調試信息
(5)連接器選項:用於控制鏈接過程
-static: 使用靜態鏈接
-l library:鏈接library函數庫文件
-L dir:指定連接器的搜索目錄dir
-shared: 生成共享文件

在使用GCC編譯程序時,編譯過程可以被細分爲四個階段:

  • 預處理:處理所有以#開頭的代碼,頭文件(展開)、宏定義(替換)、條件編譯(打開或者關閉)
    gcc -E hello.c -o gello.i

  • 編譯:把C代碼轉換成彙編代碼,同時要進行語法檢查,生成彙編代碼
    gcc -S hello.i -o hello.s

  • 彙編:把彙編代碼轉換成二進制代碼
    gcc -c hello.s -o hello.o

  • 鏈接:鏈接代碼需要用到的庫文件以及其他文件

  • gcc hello.o -o hello

例如:

//test.c
#include <stdio.h>
int main()
{
	printf("hello,world!\n");
	return 0;
}

1、預處理階段:
由於在test.c中使用了頭文件stdio.h,所以gcc在編譯的時候首先要把頭文件stdio.h中的內容加載到test.c中的首部。
輸入命令:gcc -E test.c -o test.i在這裏插入圖片描述
這時,我們查看一下test.i
在這裏插入圖片描述
在這裏插入圖片描述
test.i文件中的代碼有很多行,但是stdio.h不見了,被替換掉了。
2、編譯階段
編譯階段是整個編譯過程中最複雜的一個階段,同時要進行語法檢查,如果有語法錯誤,這一步會報錯。
gcc -S test.i -o test.s
會生成彙編代碼
在這裏插入圖片描述
3、彙編階段
彙編階段就是將彙編語言翻譯成二進制文件,即目標文件。
gcc -c test.s -o test.o
在這裏插入圖片描述
4、鏈接階段
目標文件雖然已經被CPU識別,但是單個目標文件一般是無法運行的。原因在於一個程序往往是由多個源文件組成的,每一個源文件只對應一個目標文件。鏈接階段的任務就是把程序中的所有的目標文件和所需的庫文件都鏈接在一起,最終生成一個可執行文件。
gcc test.o -o test.out
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章