天天看點

迅為IMX6ULL開發闆Ubuntu下C程式設計入門(一)

本篇段倆部分3.1 Linux下編寫第一個 C C 程式,3.2gcc 編譯器

我們在 Windows 下使用 C 語言開發的時候,一般都會有支援 Windows 的開發工具,比如我們學習 51 單片機或者 STM32,所使用的的 Keil 開發軟體。此類開發工具一般都會集編輯、編譯于一體,我們隻需要編輯好代碼,電機開發工具的編譯按鈕,就可以自動為我們編譯出可執行的二進制檔案了。Ubuntu 下的 C 語言開發與 Windows 下的 C 語言開發不一樣的,并沒有圖形界面的開發工具,而且編輯和編譯是分開的。我們需要使用文本編輯軟體先編寫代碼,然後使用編譯工具(GCC)來編譯,最終生成可執行的二進制檔案。如果我們的工程中有多個源檔案,在編譯的時候我們通常會通過 Makefile 檔案來管理整個工程的源檔案。本章我們來學習如何在 Ubuntu 下進行 C 語言成的編輯,GCC 編譯,Makefile 檔案的使用。通過本章學習我們可以掌握 Linux 下的 C 語言開發基本方法,為後面的學習做好準備。 3.1 Linux  下編寫第一個 C C 程式 程式 本章節開始的部分我們介紹了 Ubuntu 下 C 程式開發分成兩部分:編輯和編譯。Ubuntu 下有很多種文本編輯的工具,如 vim、Gedit、Emacs,這裡我們使用前面章節介紹的 vim 文本編輯工具來編輯 C 程式。相信大家在學習 C 語言的時候都是從“Hello World”這個程式開始的吧,下面我們通過這個程式,來學習下 Linux下 C 程式開發的流程。 3.1.1  代碼編寫 首先我們在使用者根目錄下建立檔案夾“work”,用于儲存所有 C 語言的程式,運作結果如下圖所示:

迅為IMX6ULL開發闆Ubuntu下C程式設計入門(一)

然後進入建立的檔案夾 work,為了友善管理,我們每個例程都建立單獨的檔案夾,首先我們建立檔案夾“hello_world”來儲存我們的第一個 C 程式,如下圖所示:

迅為IMX6ULL開發闆Ubuntu下C程式設計入門(一)

然後進入上圖中的 hello_world 檔案夾,使用 vi 指令建立檔案“main.c”,然後在裡面輸入下面的代碼: #include int mian(int argc, char *argv[]) { printf("Hello World!\n"); return 0; } 編寫完以後儲存并退出 vim 編輯器,然後可以使用 cat 指令檢視代碼是否儲存成功,如下圖所示:

迅為IMX6ULL開發闆Ubuntu下C程式設計入門(一)

通過上圖可以看到代碼已經編輯完成了。 3.1.2  代碼編譯 Ubuntu 下使用 gcc 編譯器來編譯 C 程式,我們在安裝 Ubuntu 系統的時候,gcc 編譯器 morning 安裝好了,我們可以在終端輸入“gcc -v”來檢視下 gcc 的版本,如下圖所示:

迅為IMX6ULL開發闆Ubuntu下C程式設計入門(一)

通過上圖可以看到 gcc 的版本資訊,說明我們的 Ubuntu 上已經安裝了 gcc 編譯器了,下面我們來看看怎麼通過 gcc 編譯我們的第一個 C 程式,我們在終端輸入“gcc main.c -o main”,然後回車,會生成 main 檔案,如下圖所示:

迅為IMX6ULL開發闆Ubuntu下C程式設計入門(一)

在上面的“gcc main.c -o main”這個指令裡面“-o“用來指定編譯生成的檔案名字,我們指定的是 main,是以在圖 3.1.2.2 中可以看到生成了檔案“main”,如果我們想生成其它的檔案名字,我們隻需要修改“-o”後面的 main(修改成您希望生成的檔案名字)。經過前面的步驟已經生成了可執行檔案 main,現在我們示範下在終端如何運作一個可行性的程式,我們直接在終端目前目錄下(可執行檔案所在的目錄下)輸入“./main”,然後回車,就可以運作可執行檔案 main 了,運作結果如下圖所示:

迅為IMX6ULL開發闆Ubuntu下C程式設計入門(一)

在上圖中運作的指令“./main”,其中的“./”代表目前目錄下。我們可以看到在終端列印出了 HelloWorld!。至此,Linux 下的 C 語言編輯和編譯的一整套流程我們就介紹完了。 3.2 c gcc 編譯器 編譯器 3.2.1 gcc  指令分析 在 3.1 節我們已經使用 gcc 編譯了 Linux 下的第一個 C 程式,gcc 指令的格式如下: gcc [參數] [檔案名] 主要參數說明如下: -c 編譯、彙編到目标代碼(.o),不連結成可執行檔案 -g 生成調試資訊 -o 編譯完成後生成的檔案名,如果不使用該選項,預設生成 a.out 檔案 -O 對程式進行優化編譯,産生的可執行檔案執行效率高 -w 不生成任何警告 -S 僅編譯到彙編語言,不進行彙編和連結

3.2.2  編譯警告錯誤處理 我們是 Windows 下使用 Keil 或者其他開發工具,在編譯的時候,如果程式有錯誤,開發工具會提示出具體的錯誤資訊,可以很友善的定位到問題點,快速的修改出現的問題,gcc 同樣也有類似的功能,下面我們來看下 gcc 的錯誤提示功能,首先我們在 work 目錄下建立檔案夾“test2”,然後使用 vim 在 test2 檔案夾建立 main.c 檔案夾,在 main.c 檔案輸入如下代碼: #include int main(int argc, char *argv[]) { int a; a = 1 printf("a=\n", a); return 0; } 上面代碼有兩處錯誤: 第 7 行 最後缺少“;” 第 9 行 printf 文法不對,應該為:printf("a =%d\n", a); 我們使用 gcc 編譯 main.c,可以看到 gcc 會提示錯誤資訊,如下圖所示:

迅為IMX6ULL開發闆Ubuntu下C程式設計入門(一)

從上圖中可以看到在 mian.c 檔案的第 9 行 printf 前面缺少“;”我們在第 7 行“a = 1”後面加上“;”,然後繼續編譯,如下圖所示:

迅為IMX6ULL開發闆Ubuntu下C程式設計入門(一)

從上圖可以看出編譯提示文法格式不對,我們把第 9 行修改成“printf("a=%d\n", a);”,然後在繼續編譯,如下圖所示:

迅為IMX6ULL開發闆Ubuntu下C程式設計入門(一)

我們可以看到這次 gcc 編譯通過,最終生成了檔案 main。我們在終端執行 main,運作結果如下圖所示:

迅為IMX6ULL開發闆Ubuntu下C程式設計入門(一)

從上圖可以看到運作的結果和我們涉及到額結果一緻,通過本例程可以看到 gcc 編譯器不僅可以檢測出

程式的錯誤,而且還會标記處錯誤在哪個檔案的哪一行,很友善的幫助我們去修改問題。

更多内容關注:

迅為IMX6ULL開發闆Ubuntu下C程式設計入門(一)

繼續閱讀