linux中gcc的使用-----基礎篇

簡介

  還記得大家寫下人生中的第一行代碼,運行自己的第一個程序時候的場景嗎。打開你的IDE,然後寫上代碼,保存,點擊編譯,點擊運行,然後你的桌面上就產生了一個醜陋的小黑框,當時的你是不是覺得那很神奇,其實幹完這些,對於你來說是不飛吹灰之力的。
  可是現在只給你一個linux下的模擬終端,請問怎麼編寫出一個hello world這樣的程序,似乎還是比較難的,因爲再也沒有了Windows環境下的那種一點就出結果的快感了,其實筆者要指出的是,正是Windows環境下的這種特點,導致很多初學編程的人不瞭解其中的一些細節。
  還是先說一下gcc吧,gcc是什麼呢,gcc其實是GNU推出的一款編譯器,最開始是針對C語言的,但是目前gcc支持了很多其他的語言,比如說C++和java等。對於初學者,可能還是不能理解什麼是編譯器,大家想一想一個問題。你寫的代碼是你能看懂的,但是憑什麼計算機也可以看懂呢?這就好比兩個使用不同語言的國家的人交流一樣,請問他們怎麼進行交流。很聰明,你一定想到了,通過翻譯官,那麼我想說的是編譯器實際上也是充當這麼一個角色,當然他的功能遠遠不止這些了。

不得不講的編譯

  在Windows環境下編程,很多人習慣上的認爲編譯就是點擊一個按鈕就完成了,事實上並不是這樣,我們可以如此快捷的使用是因爲計算機幫我們做了許多的東西,編譯也並不是一步完成的。他大致可以分爲一下四步:
1.預編譯階段
  不知道初學者是否問過沒有,爲什麼使用printf函數就可以把信息輸出到屏幕?很簡單因爲他是一個函數,而且是一個別人已經寫好的函數,可是別人寫好的函數我們怎麼可以使用呢?還記得你在行首寫下的include指令嗎,這個指令就是告訴自己的程序,我使用了一個別人寫好的函數,這個函數在XXXX文件裏。而預編譯的過程實際上就是把這個文件展開,這樣你的printf就可以用了,同樣define命令是如此,簡單的來說,預編譯並不是編譯,所以叫預編譯嘛。預編譯對原來的程序進行一定的修飾,爲編譯階段做準備
2.編譯階段
  熟悉計算機發展史的人知道,計算機語言是從最開始的01機器語言,演變到彙編語言,然後纔到現在的高級語言的,隨着發展,計算機語言與人的關係是越來越近了,可是離計算機卻越來越遠了,爲了讓計算機可以可理解我們使用的高級語言,就必須實現這麼一個逆過程,讓高級語言向低級轉換,編譯階段就是完成這麼一件事,他把我們預編譯好的代碼轉換成彙編語言,至於這彙編語言長啥樣,自己cat查看一下吧
3.彙編階段
  接着上面所述,計算機是無法看懂彙編語言的,於是還要做進一步的轉換,將彙編代碼轉換成機器代碼
4.鏈接階段
  好了,現在計算機似乎可以看懂我們寫的代碼了,但是別急,雖然計算機可以看懂我能的代碼,但是你沒有發現我們的程序一下子用來這個庫的函數,一下子用了那個庫的函數,生成的代碼並不是一個整體。這一步的目的就是把各個獨立的文件鏈接起來沒事他們可以相互配合完成制定的功能。

  說了這麼多,你是否明白了什麼呢,接下來看看我們的gcc是怎麼完成這些的,這就不得不介紹幾個命令了
簡單粗暴的
gcc test.c
  這樣可以一步到位,生成一個可執行文件a.out,如果已經存在則會進行覆蓋,是不是覺得a.out太死板,沒點個性呢,每次我最開始也是這麼認爲的。
gcc -o gexing test.c
  使用-o參數,然後後面可以跟還是那個你要知道的生成的文件名,這回有個性了吧。記住這個參數-o只要你要制定名稱,在後續的命令中都可以使用
gcc -o test.i -E test.c
  它執行的是預編譯階段,生成文件test.i
gcc -o test.s -S test.i
  它執行的是編譯階段,會生成彙編文件test.s
gcc -o test.o -C test.i
  執行彙編階段,生成test.o文件
天哪,又是要記參數,最頭痛了,別急,從上到下看一下這三個參數,再看看你的鍵盤做上角是不是有個鍵呢,這下記住了吧,哈哈哈

最後一部就是鏈接了
gcc -o test test.o
  簡單吧,他會生成一個名爲test的可執行文件,這個文件就是我們的目標文件哦。

  看到這裏可能有人要開始罵了,我明明可以一步完成爲什麼要完成這麼多步呢,但是你有沒有注意到,每個階段都生成了不同的文件,記住,這些文件以後會是很有用的,這就是linux比Windows好的地方,編寫一個hello world,你是不是發現你真的學到了很多東西,因爲系統沒有可以去隱藏這些東西,一切都有你自己手動實現。
  掌握了這幾個參數,就可以開始在linux中寫寫代碼了,但是還是需要學習很多東西,這樣說linux對程序員的好處,他真的要學的東西太多了,基礎篇就到這裏了,至於提高篇嘛,等我學會了,理解了再說吧。


來自長沙理工的2017級大一學生一名,有熱愛學習的同學們可以聯繫我哦807920489(qq),女士優先,哈哈哈

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