linux gcc編譯c文件頭文件
linux gcc編譯c文件頭文件,使用GCC編譯器編譯C語言
凶豬下山
轉載
關注
0點贊·1047人閱讀
GCC編譯C源代碼有四個步驟:預處理—->編譯—->匯編—->鏈接。
可以利用GCC的參數來控制執行的過程,這樣就可以更深入的了解編譯C程序的過程。
下面將通過對一個程序的編譯來演示整個過程。
#include
int main()
{
printf("happy new year!\n");
return 0;
}
1:預處理:編譯器將C程序的頭文件編譯進來,還有宏的替換,可以用gcc的參數-E來參看。
預處理 命令:gcc -E hello.c -o hello.i
作用:將hello.c預處理輸出hello.i
2:編譯:這個階段編譯器主要做詞法分析、語法分析、語義分析等,在檢查無錯誤後後,把代碼翻譯成匯編語言。可用gcc的參數-S來參看。
編譯器(ccl)將文本文件hello.i 翻譯成文本文件hello.s, 它包含一個匯編語言程序。匯編語言程序中的每條語句都以一種標準的文本格式描述了一條低級機器語言指令。
編譯命令:gcc -S hello.i -o hello.s
作用:將預處理輸出文件hello.i匯編成hello.s文件
3:匯編:把編譯階段生成的.s 文件轉換為二進制目標代碼。可用gcc的參數-c來參看。匯編器(as)將hello.s翻譯成機器語言指令,把這些指令打包成可重定位目標程序的格式, 並將結果保存在目標文件hello.o中。hello.o文件是一個二進制文件,它的位元組編碼是機器語言。
匯編 命令:gcc -c hello.s -o hello.o
作用:作用:將匯編輸出文件hello.s編譯輸出hello.o文件
4:鏈接:把obj文件鏈接為可執行的文件:鏈接器(ld)負責.o文件的並入。結果就是hello文件,它是一個課執行的目標文件,可以載入到存儲器後由系統調用。
鏈接命令:gcc hello.o -o hello
一步操作的話是: (-o必須在hello之前 )
$gcc hello.c -o hello
$./hello或者:(會默認生成a.out文件)
$gcc hello.c
$./a.out
『貳』 我想用gcc編譯一個匯編程序,就是把c語言轉成匯編。
假設你的函數保存在main.c中。
gcc -S main.c -o main.s
-S表示assembly 匯編的意思,也就是生成匯編文件
『叄』 gcc -s(注意是小寫的s)命令是什麼意思
這個參數會把符號表從最終的可執行文件中刪除。沒有符號表,你就不能用gdb調試了。常見的用法是:
比方說你的程序由
1.c
2.c
3.c
組成,那麼你編譯的時候應該是這樣的
gcc
-g
-c
1.c
gcc
-g
-c
2.c
gcc
-g
-c
3.c
然後鏈接成可執行文件
gcc
-o
test
1.o
2.o
3.o
此時生成的
test
是可以用gdb來調試的,因為它包括了符號表等調試信息。
但是如果你用
gcc
-s
-o
test_s
1.o
2.o
3.o
生成的
test_s
就不能調試了,因為-s參數把符號表等信息都從可執行文件中去除了。
此時你比較一下
test
和
test_s
,雖然功能是完全一樣的,但是
test_s
的尺寸要小很多,就是因為符號表被去除的原因。
『肆』 .s文件的生成;C語言中.c文件怎麼生成.s文件。謝謝大家!
fprintf(fp1,"abc"):
你這里自己寫的abc。代碼寫錯了,你再好好想想,輸出文本內容是這樣寫的么
『伍』 linux 怎麼編譯c的源程序的gcc,編譯命令是什麼
在Linux下面,如果要編譯一個C語言源程序,我們要使用gcc編譯器。
先將源文件編譯成目標文件:gcc - c hello.c
生成hello.o文件,再將目標文件編譯成可執行文件:gcc -o hello hello.o
如:
int main(int argc,char **argv)
{
printf("Hello Linux ");
}
(5)Gcc編譯成s擴展閱讀:
在使用GCC編譯器的時候,我們必須給出一系列必要的調用參數和文件名稱。GCC編譯器的調用參數大約有100多個,這里只介紹其中最基本、最常用的參數。具體可參考GCC Manual。
GCC最基本的用法是∶gcc [options] [filenames]
其中options就是編譯器所需要的參數,filenames給出相關的文件名稱。
網路_gcc
『陸』 gcc 編譯生成外部調試語法文件
你用的是linux系統吧? binutil包裡面有個objcpy命令:
obj --only-keep-debug [被提取的文件] [提取出來的調試符號文件,建議加.debug後綴]
另外要把調試信息去掉是用strip命令。你可以man下看看。
strip --strip-debug [需要處理的文件]
把debug信息加回去:
obj --add-gnu-debuglink=[debug文件] [需要添加debug信息的文件]
『柒』 請問linux下,gcc編譯程序的過程(從讀取源文件到製作可執行程序中間所有過程,越詳細越好)
gcc -S *.c 預處理+反匯編
『捌』 Linux下gcc編譯器用什麼命令生成.s文件
gcc -s 源文件 –o目標文件
『玖』 GCC如何編譯一個匯編文件,得到可執行文件
gcc -c my.s(生成my.o)
gcc -o my my.o
my就是所要的可執行文件
或者直接可以gcc -o my my.s