gcc(gnu c compiler)是gnu推出的功能強大、效能優越的多平台編譯器,是gnu的代表作之一。gcc可以在多種硬體平台上編譯出可執行程式,其執行效率與一般的編譯器相比平均效率要高20%~30%。
gcc最基本的用法是:
gcc [options] filenames
options:編譯器所需要的編譯選項
filenames:要編譯的檔名
具體使用:
1.首先建立乙個hello.c的檔案,執行命令:touch hello.c
2.使用vim命令開啟hello.c的檔案,執行命令:touch hello.c
3.編寫hello world的應用程式。
4.使用gcc命令編譯hello.c檔案,執行命令:gcc hello.c。執行ls檢視當前目錄我們會發現多出了乙個a.out檔案,然後我們執行a.out就會列印hello world!
這時候假如我們在寫乙個叫hello1.c的檔案內容是列印hello world1。如果我們還用gcc編譯hello1.c之後會發現產生了乙個a.out的檔案。但是這裡a.out的檔案把hello.c編譯之後的檔案覆蓋了,我想這樣的結果是每個人都不想要的吧,於是我們就指定輸出檔名。
使用的命令格式為:gcc 檔名 -o 輸出的檔案。那就看看執行結果吧。
gcc編譯器能將c/c++語言源程式、匯程式設計序形成可執行檔案。整個形成過程可以被細分為四個階段:
gcc通過字尾來區別輸入檔案的類別,常見型別有:
.c為字尾的檔案:c語言源**檔案
.a為字尾的檔案:是由目標檔案構成的庫檔案
.c,.cc或.cxx為字尾的檔案:是c++源**檔案
.h為字尾的檔案:標頭檔案
.o為字尾的檔案:是編譯後的目標檔案
.s為字尾的檔案:是組合語言源**檔案
相應的gcc命令為:
預處理:gcc -e hello.c -o hello.i
編譯: gcc -s hello.i -o hello.s 輸出彙編檔案
彙編: gcc -c hello.s -o hello.o 輸出二進位制檔案
-o output-filename:確定可執行檔案的名稱為output_filename。如果不給出這個選項,gcc就給出缺省的可執行檔案a.out
-o,對程式進行優化編譯、鏈結,採用這個選項,整個源**在編譯、鏈結過程中進行優化處理,這樣產生的可執行檔案的執行效率可以提高,但是,編譯、鏈結的速度就相應地慢一些。
-o2,比-o更好的優化編譯、鏈結,當然這個編譯、鏈結過程會更慢。
下面就看乙個優化前和優化後的對比:
-c:不鏈結。編譯器只是由輸入的.c等原始檔編譯生成.o為字尾的中間檔案。
-g:產生除錯工具(gnu的gdb)所需要的符號資訊,要想對編譯出的程式進行除錯,就必須加入這個選項。
-i dirname:將dirname所指出的目錄作為編譯器尋找標頭檔案的標準路徑。
下面看乙個例子:
a.h不是標準路徑下的標頭檔案,下面我們檢視一下a.h檔案的路徑。
那我接下來在用gcc命令編譯一下,會報如下錯誤
接下來我們有-i指明標頭檔案的路徑再試一次。
基本的gcc也就這些了,對應linux-arm的程式設計也就足夠用了!接下來就該進入裸機程式設計了!
Windows 纖程 協程
寫這篇文章的原因是,很多框架 庫都有協程 纖程的支援,比如python的gevent,php 的swoole等等,但是具體是什麼樣的呢?為什麼協程方式效能會更好?很多初學者聽個詞,聽風就是雨,把協程和io能混成乙個概念。使用纖程的第乙個步驟是將已有的執行緒轉換為乙個纖程。convertthreadt...
協程巢狀協程
import asyncio import functools 第三層協程 async def test1 print 我是test1 await asyncio.sleep 1 print test1已經睡了1秒 await asyncio.sleep 3 print test1又睡了3秒 ret...
9 協程 協程理論
本節的主題是基於單執行緒來實現併發,即只用乙個主線程 很明顯可利用的cpu只有乙個 情況下實現併發,為此我們需要先回顧下併發的本質 切換 儲存狀態 ps 在介紹程序理論時,提及程序的三種執行狀態,而執行緒才是執行單位,所以也可以將上圖理解為執行緒的三種狀態cpu正在執行乙個任務,會在兩種情況下切走去...