在Linux下簡單編寫、編譯並執行一個C語言程序

本文面向第一次在linux嘗試寫C語言程序的新人。有經驗的請繞行。


C語言用法不是本文介紹的關鍵,本文只是引入如何第一次在linux系統下編寫、編譯和執行一個簡單的c程序。學會後請自行深入。


= 前提基礎 =

Linux系統的路徑寫法有兩種,一種是相對路徑一種是絕對路徑。

絕對路徑都是以“/”開頭的,比如/usr/bin/vi或者/home/zorro/,代表從根目錄"/"開始計算的絕對路徑。

相對路徑都是不以“/”開頭的,不如git/linux/或者work/testplan,代表從當前所在目錄開始計算的相對路徑,如果想知道你現在所在的目錄是什麼可以藉助pwd命令查看。


你剛剛登陸進來後默認是處在當前用戶的家目錄的,/home目錄下一般存放所有普通用戶的家目錄(並不是所有的用戶都有家目錄,也不是限定家目錄一定要在/home下)。比如我們在安裝系統是創建了一個叫zorro的用戶,那麼就會存在一個/home/zorro/的目錄,/home/zorro目錄作爲zorro這個用戶的家目錄,每次登陸zorro用戶就會默認從這個目錄開始。


linux最最常用的兩個命令:cd和ls。

ls的意義是list directory contents。用法是:

ls [option].... [file]...

在linux的文檔中中括號代表可選項,沒有也可以執行。所以ls命令可以這樣用:

1、直接執行"ls",代表查看當前所在目錄的內容。如:

2、查看某個目錄下的內容則在ls後面跟上路徑名,路徑名可以是絕對路徑以可以是相對路徑,如:

3、想看更詳細一點的信息則可以用"-l"(注意是小寫的L前面有個減號),linux系統下命令的選項一般都有減號跟着,如下圖,可以看到除了內容名字外還有訪問權限,屬主屬組,修改日期等信息。以"d"開頭的代表是目錄,以"-"開頭的代表是普通文件。Linux下有幾大文件類型上述是其中最常見的兩種,其它的請自行去了解。

ls命令還有很多用法,比如-d選項,還有很多別的。具體請運行“man ls”查看,退出查看可按Q鍵。


cd是一個內建命令,它不是一個單獨的可執行文件,它是命令行解釋器自帶的。cd的用法很簡單,就是cd後面接路徑名,可以是絕對路徑也可以是相對路徑,代表進入這個路徑。進入某個路徑其實就是把這個路徑作爲當前所在路徑,也就是相對路徑的起點變了。


關於路徑還有兩個要說的地方,那就是"."和".."。“.”代表當前路徑,".."代表當前路徑的上一級目錄的路徑。比如執行“cd ..”就是退進到上一級目錄,如果是"cd ../.."就是當前路徑退兩級。"ls ../zorro"就是查看上一級目錄的zorro的內容。


cd和ls不是任何路徑都能進入和查看的,會有訪問控制的限制。這個以後再說。


還有幾個常用的,touch可用於創建一個普通文件,mkdir可用於創建目錄,less可以以只讀方式打開一個文件。具體的可參考相應的man文檔。


= 編輯器 =

linux下兩大編輯器陣營,一個是emacs,一個是vi。不要小看這兩大編輯器,它們的功能遠遠比你一般理解上的編輯器強太多太多倍了。不過本文僅僅就如何簡單使用它們編寫代碼、修改代碼並保存。

上文我們說了安裝一個Fedora-19系統,下面的描述都是針對Fedora-19的情況下。


== vi ==

vi是Unix的傳統編輯器,現在傳承到了Linux下。常聽到的vim可以理解爲vi的升級版,在Fedora下如果你裝了vim,那麼你執行vi的時候實際上就是執行了vim。

第一步:安裝

打開終端,在終端上執行

sudo yum install vim

回車,如果網絡良好,yum會幫你計算安裝包依賴然後給你一個需要安裝的包列表,你只需要輸入“y”回車就行了。如果一切順利vim就已經安裝到系統中了。


第二步:編輯

在終端執行

vi hello-vi-world.c

就會進入vi的界面

現在還不能編輯,要想進入編輯模式需要按"i"鍵,按下之後進入插入內容的模式,會看到最下方出現“插入”或"INSERT"的字樣:


人啊後就可以開始編輯了,怎打字就不用多說了吧,比如寫一個最簡單的C程序

現在還內容還沒有被寫到文件裏,如果想要保存則按照如下步驟進行:

1、按Esc鍵退出編輯模式。

2、輸入一個":"冒號鍵,在左下角出現一個冒號。

3、輸入一個"w"鍵,然後回車。你會看到下方提示已經written,說明保存成功了,這個文件也被自動創建。

如果要退出vi編輯器則把第三步的w換成q回車就退出了。

如果第三步想要保存退出,冒號後面寫"wq"回車就行了,代表保存然後退出。或者直接寫"x"回車也代表保存退出。


順帶說一下,如果你裝了中文輸入法是可以使用的。Fedora-19的默認切換輸入法組合鍵是Alt+shift,或者你手動去點右上角下圖的位置去選擇:


== emacs ==

安裝emacs編輯器可以執行:

sudo yum install emacs

輸入口令,然後y確認。


emacs編輯器是由開源軟件的精神領袖Richard Stallman編寫的,功能也非常強大。

在終端輸入

emacs hello-em-world.c &

就會看到emacs啓動後的界面


看到上下兩部分,上部分是編輯的地方,下面是一個歡迎界面可以通過配置默認去掉它。手動去掉可以把光標放到上半部分,然後敲擊Ctrl+x然後鬆手後再敲擊“1”,這樣就只能看到當前光標所在的編輯緩衝區了。注意Ctrl+x是一個常用的前綴組合鍵。

現在開始編輯,編輯一個簡單的C程序,如下:

現在內容還是在緩衝區中,如果要保存可以使用組合鍵Ctrl+x然後再輸入Ctrl+s,保存當前文件。

如果要退出則按:Ctrl+x然後再按Ctrl+c。這樣就退出emacs了。


= 編譯 =

Linux下的常用編譯器就是gcc系列,C++的是g++。如果你還沒安裝gcc則需要安裝:sudo yum install gcc。


安裝完後我們嘗試對上面兩個程序分別進行編譯,如果要將hello-vi-world.c編譯成可執行二進制文件,則執行:

gcc -o hello-vi-world hello-vi-world.c -Wall

如果沒有語法錯誤就編譯好了,我們用ls看一下。


看到一個帶"x"權限(可執行權限)的綠色文件(不一定會顯示顏色)。下面嘗試執行一下試試,執行誰只要在終端上輸入要執行的文件的路徑名即可,比如輸入./hello-vi-world(注意前面一個點),代表執行當前路徑下的hello-vi-world文件。


可以看到執行後輸出的結果,可以自己嘗試編譯並執行hello-em-world.c。


gcc其實有很多很多功能,比如要想預編譯hello-em-world.c文件可以執行

gcc -o hello-em-world.i hello-em-world.c

執行成功後就會出現一個hello-em-world.i的文件,可以用less,vi或emacs查看一下它的內容,就是經過預編譯後的內容。


如果要進行編譯,這裏說的編譯是純粹的編譯,就是把c代碼編譯成彙編代碼,則可以執行:

gcc -S -o hello-em-world.s hello-em-world.i

把.i文件寫爲hello-em-world.c也行,就是跳過手動預編譯直接完成預編譯和編譯兩個過程。這時會得到一個hello-em-world.s文件,打開看一下,裏面是編譯好的使用於當前體系結構的彙編代碼。


把彙編代碼進行彙編可以執行:

gcc -c -o hello-em-world.o hello-em-world.s

把.s文件換成.c也行,就是自動完成預編譯、編譯和彙編三個過程。現在得到一個hello-em-world.o文件,這一個二進制文件,但不是最後的可執行二進制文件,因爲它還缺少最後一步連接處理。


最後對.o文件進行連接,我們這裏就一個.o文件所以簡單,經常是需要有多個.o文件需要連接。連接執行:

gcc -o hello-em-world hello-em-world.o

如果把最後的.o文件寫成.c,那就和最開始我們用hello-vi-world.c編譯時示範的那樣了。實際上那樣是完成了預編譯、編譯、彙編和連接一連串的過程。


好了,現在執行一個最後的編譯結果吧。


gcc可以支持很多平臺,剛纔示範的是通用PC下的gcc編譯,你還可以交叉編譯,使用gcc針對arm或者avr或者其它平臺的版本。這個就自己去研究吧。


想了解更多gcc的只是可以到GNU的網站上去看看。


順帶提一下gdb是常用的調式軟件,如何使用gdb調式gcc編譯出來的程序請自行學習。可能我會在後面略微介紹。


內容粗糙簡陋,全在拋磚引玉。想學習就自己去深入理解吧,編輯器不用兩個都很熟,選擇其中一個用熟了就行了。






發佈了31 篇原創文章 · 獲贊 75 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章