當前位置:首頁 » 編程軟體 » gcc匯編編譯

gcc匯編編譯

發布時間: 2023-08-16 22:25:23

A. gcc是什麼意思

GCC(GNU Compiler Collection,GNU編譯器套件),是由 GNU 開發的編程語言編譯器。它是以GPL許可證所發行的自由軟體,也是 GNU計劃的關鍵部分。

GCC原本作為GNU操作系統的官方編譯器,現已被大多數類Unix操作系統(如Linux、BSD、Mac OS X等)採納為標準的編譯器,GCC同樣適用於微軟的Windows。GCC是自由軟體過程發展中的著名例子,由自由軟體基金會以GPL協議發布。

GCC功能與作用:

1、預處理

命令gcc首先調用cpp進行預處理,在預處理過程中,對源代碼文件中的文件包含(include)、預編譯語句(如宏定義define等)進行分析。

2、編譯

用GCC編譯C/C++代碼時,它會試著用最少的時間完成編譯並且編譯後的代碼易於調試。易於調試意味著編譯後的代碼與源代碼有同樣的執行順序,編譯後的代碼沒有經過優化。

3、連接

當所有的目標文件都生成之後,gcc就調用ld來完成最後的關鍵性工作,這個階段就是連接。在連接階段,所有的目標文件被安排在可執行程序中的恰當的位置,同時,該程序所調用到的庫函數也從各自所在的檔案庫中連到合適的地方。

4、匯編

匯編過程是針對匯編語言的步驟,調用as進行工作,一般來講,.S為後綴的匯編語言源代碼文件和匯編、.s為後綴的匯編語言文件經過預編譯和匯編之後都生成以.o為後綴的目標文件。

GCC在執行編譯工作的時候,總共需要4步:

1、預處理,生成 .i 的文件[預處理器cpp]

2、將預處理後的文件轉換成匯編語言, 生成文件 .s [編譯器egcs]

3、有匯編變為目標代碼(機器代碼)生成 .o 的文件[匯編器as]

4、連接目標代碼, 生成可執行程序 [鏈接器ld]

常用選項

-ansi 只支持 ANSI 標準的 C 語法。這一選項將禁止 GNU C 的某些特色, 例如 asm 或 typeof 關鍵詞。

1、-c:只編譯並生成目標文件。

2、-DMACRO:以字元串"1"定義 MACRO 宏。

3、-DMACRO=DEFN:以字元串"DEFN"定義 MACRO 宏。

4、-E:只運行 C 預編譯器。

5、-g:生成調試信息。GNU 調試器可利用該信息。

6、-IDIRECTORY:指定額外的頭文件搜索路徑DIRECTORY。

7、-LDIRECTORY:指定額外的函數庫搜索路徑DIRECTORY。

8、-lLIBRARY:連接時搜索指定的函數庫LIBRARY。

9、-m486:針對 486 進行代碼優化。

B. gcc編譯線程程序,為什麼要加-lpthread,頭文件已經包含了<pthread.h>了啊

-lpthread是鏈接庫,

<pthread.h>只有申明,實現部分都在庫裡面。

創建線程時一般是把函數的指針做參數,所以要加一個取地址符號。

ret=pthread_create(&id,NULL,(void *)&thread,NULL);

另外,建議要檢查一下創建線程的返回值ret是否成功,防止影響後面的代碼。

(2)gcc匯編編譯擴展閱讀:

每個語言編譯器都是獨立程序,此程序可處理輸入的原始碼,並輸出組合語言碼。全部的語言編譯器都擁有共通的中介架構:一個前端解析符合此語言的原始碼,並產生一抽象語法樹,以及一翻譯此語法樹成為GCC的暫存器轉換語言〈RTL〉的後端。

編譯器最佳化與靜態程序碼解析技術(例如FORTIFY_SOURCE,一個試圖發現緩沖區溢位〈buffer overflow〉的編譯器)在此階段應用於程序碼上。最後,適用於此硬體架構的組合語言程序碼以Jack Davidson與Chris Fraser發明的演算法產出。

C. 我想用gcc編譯一個匯編程序,就是把c語言轉成匯編。

假設你的函數保存在main.c中。
gcc -S main.c -o main.s
-S表示assembly 匯編的意思,也就是生成匯編文件

D. 為什麼我用gcc編譯c程序到最後無法自動生成一個exe程序

把你的命令行(控制台)輸出的信息貼上來看看,根據提示信息才好判斷.
GCC編譯C源碼有四個步驟:
預處理----->
編譯
---->
匯編
---->
鏈接
現在我們就用GCC的命令選項來逐個剖析GCC過程。
1)預處理(Pre-processing)
在該階段,編譯器將C源代碼中的包含的頭文件如stdio.h編譯進來,用戶可以使用gcc的選項」-E」進行查看。
用法:#gcc
-E
hello.c
-o
hello.i
作用:將hello.c預處理輸出hello.i文件。
2)編譯階段(Compiling)
第二步進行的是編譯階段,在這個階段中,Gcc首先要檢查代碼的規范性、是否有語法錯誤等,以確定代碼的實際要做的工作,在檢查無誤後,Gcc把代碼翻譯
成匯編語言。用戶可以使用」-S」選項來進行查看,該選項只進行編譯而不進行匯編,生成匯編代碼。
選項
-S
用法:[root]#
gcc
–S
hello.i
–o
hello.s
作用:將預處理輸出文件hello.i匯編成hello.s文件。
[root@richard
hello-gcc]#
ls
hello.c
hello.i
hello.s
3)匯編階段(Assembling)
匯編階段是把編譯階段生成的」.s」文件轉成二進制目標代碼.
選項
-c
用法:[root]#
gcc
–c
hello.s
–o
hello.o
作用:將匯編輸出文件test.s編譯輸出test.o文件。
[root]#
gcc
-c
hello.s
-o
hello.o
[root]#
ls
hello.c
hello.i
hello.o
hello.s
4)鏈接階段(Link)
在成功編譯之後,就進入了鏈接階段。
無選項鏈接
用法:[root]#
gcc
hello.o
–o
hello.exe
作用:將編譯輸出文件hello.o鏈接成最終可執行文件hello.exe。
[root]#
ls
hello.c
hello.exe
hello.i
hello.o
hello.s
運行該可執行文件,出現正確的結果如下。
[root@localhost
Gcc]#
./hello
Hello
World!

E. 嵌入式軟體中GCC編譯,匯編,鏈接,調試的作用

GCC:是一套由GNU工程開發的支持多種編程語言的編譯器。將程序代碼編譯成機器語言。
編譯:1、利用編譯程序從源語言編寫的源程序產生目標程序的過程。
2、用編譯程序產生目標程序的動作。 編譯就是把高級語言變成計算機可以識別的2進制
語言,計算機只認識1和0,編譯程序把人們熟悉的語言換成2進制的。 編譯程序把一
個源程序翻譯成目標程序的工作過程分為五個階段:詞法分析;語法分析;語義檢查
和中間代碼生成;代碼優化;目標代碼生成。主要是進行詞法分析和語法分析,又稱
為源程序分析,分析過程中發現有語法錯誤,給出提示信息。
匯編:把匯編語言翻譯成機器語言的過程稱為匯編,在匯編語言中,用助記符(Memoni)代替操作
碼,用地址符號(Symbol)或標號(Label)代替地址碼。這樣用符號代替機器語言的二進制
碼,就把機器語言變成了匯編語言
連接:用來把要執行的程序與庫文件或其他已經翻譯好的子程序(能完成一種獨立功能的程序
模塊)連接在一起,形成機器能執行的程序。
調試:編好程序後,用各種手段進行查錯和排錯的過程。

F. GCC如何編譯一個匯編文件,得到可執行文件

gcc -c my.s(生成my.o)
gcc -o my my.o
my就是所要的可執行文件
或者直接可以gcc -o my my.s

熱點內容
倒數的運演算法則 發布:2025-02-04 15:01:10 瀏覽:564
安卓版微信為什麼不能用 發布:2025-02-04 15:01:05 瀏覽:464
oj編譯器和本地編譯器不一樣 發布:2025-02-04 14:59:24 瀏覽:647
鳳凰地下商城wifi密碼是多少 發布:2025-02-04 14:42:00 瀏覽:904
哈希查找演算法 發布:2025-02-04 14:40:36 瀏覽:467
雲伺服器顯示黑洞 發布:2025-02-04 14:29:05 瀏覽:300
redhatlinux教程 發布:2025-02-04 14:24:48 瀏覽:831
nvidia緩存清理嗎 發布:2025-02-04 14:16:55 瀏覽:307
筆記本電腦如何設置鎖屏密碼 發布:2025-02-04 13:54:42 瀏覽:163
構成c語言程序的基本單位 發布:2025-02-04 13:49:53 瀏覽:990