Linux Red Hat GCC程式編譯

2021-07-03 00:14:53 字數 2307 閱讀 5013

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正在執行乙個任務,會在兩種情況下切走去...