1、c語言中的各種後綴名代表的意思:
.a文件代表的是靜態庫
.c代表c源代碼
.h代表c源代碼頭文件
.i代表的是c源代碼(這是被預處理過後的結果)
.o對象文件
.s匯編語言的代碼
.so動態庫
2、c語言程序從源代碼到生成可執行文件的過程:c程序源代碼(.c文件)-----(1)-----不用預處理的c程序源代碼(.i文件)----(2)---匯編語言文件(.s文件)------(3)-----機器語言文件(.o文件)-----(4)------可執行文件
其中的每個過程的意義如下:過程(1)是預處理階段,這個階段主要是根據#開頭的命令修改c源文件,主要的工作是,比如#include<stdio.h>命令告訴預處理器讀取系統文件stdio.h的內容並且把相應的內容插入到源代碼中去,就形成了.i文件。
過程(2):這個過程是編譯階段,編譯器將文本文件.i文件翻譯成文本文件.s文件。這個文件是與源文件等效的匯編語言程序。
過程(3):這個過程主要是匯編階段,在這個階段中匯編器將.s文件編譯成機器語言指令就是這裡的.o文件。
過程(4):這個過程是鏈接階段,這個階段主要就是將程序中的一些庫函數用鏈接器給進行鏈接(鏈接過程包括靜態鏈接和動態鏈接,在這裡就不細說了)。
3、講一下Ubuntu下面c源程序的各種文件的獲得:(比如有一個源程序為hello.c文件)
(1)、為了獲得可執行文件可以使用命令:gcc hello.c -o a其中-o是用來指定所生成的可執行程序的文件名,比如這裡生成的文件名是a。
(2)、如果程序中用到了不是gcc默認的庫函數的時候,比如程序中用到了math.h這個頭文件。這個頭文件不是gcc默認的頭文件,所以在編譯的時候要加入-l庫的首字母來進行編譯。比如這裡是:gcc hello.c -lm -o a.
(3)、為了將源程序編譯成.o文件的命令是指定參數-c來進行編譯。例如這裡要生成hello.o文件的編譯為:gcc -c hello.c -o hello.o。
(4)如果要執行預處理的話,使用的編譯代碼就是加上參數-E來進行編譯,比如我們這裡要生成hello.i文件,則我們編譯代碼是:gcc -E hello.c -o hello.i。
(5)、如果要生成匯編代碼,使用的編譯代碼就是加上參數-S進行編譯,比如我們要生成hello.s文件,則我們使用的編譯代碼是:gcc -S hello.c -o hello.s。