一、安裝linux操作系統(ubuntu)。
http://blog.csdn.net/sshhbb/article/details/6651807
二、學會最簡單linux操作命令。
http://blog.csdn.net/sshhbb/article/details/6704626
三、學會使用vim編輯你的程序。
http://blog.csdn.net/sshhbb/article/details/6705564
四、使用GCC編譯程序。
gcc所遵循的部分約定規則:
.c爲後綴的文件,C語言源代碼文件;
.a爲後綴的文件,是由目標文件構成的檔案庫文件;
.C,.cc或.cxx 爲後綴的文件,是C++源代碼文件;
.h爲後綴的文件,是程序所包含的頭文件;
.i 爲後綴的文件,是已經預處理過的C源代碼文件;
.ii爲後綴的文件,是已經預處理過的C++源代碼文件;
.m爲後綴的文件,是Objective-C源代碼文件;
.o爲後綴的文件,是編譯後的目標文件;
.s爲後綴的文件,是彙編語言源代碼文件;
.S爲後綴的文件,是經過預編譯的彙編語言源代碼文件。
gcc執行過程:
當使用gcc時,gcc會完成預處理、編譯、彙編和連接。前三步分別生成目標文件,連接時,把生成的目標文件鏈接成可執行文件。gcc可以針對支持不同的源程序文件進行不同處理,文件格式以文件的後綴來識別.
在預處理階段,輸入的是C語言的源文件,通常爲*.c。它們通常帶有.h之類頭文件的包含文件。這個階段主要處理源文件中的#ifdef、 #include和#define命令。該階段會生成一箇中間文件*.i,但實際工作中通常不用專門生成這種文件,因爲基本上用不到;若非要生成這種文件不可,可以利用下面的示例命令:
gcc -E test.c -o test.i |
在編譯階段,輸入的是中間文件*.i,編譯後生成彙編語言文件*.s 。這個階段對應的GCC命令如下所示:
GCC -S test.i -o test.s |
在彙編階段,將輸入的彙編文件*.s轉換成機器語言*.o。這個階段對應的GCC命令如下所示:
GCC -c test.s -o test.o |
最後,在連接階段將輸入的機器代碼文件*.s(與其它的機器代碼文件和庫文件)彙集成一個可執行的二進制代碼文件。這一步驟,可以利用下面的示例命令完成:
GCC test.o -o test |
示例代碼 a.c:
#include <stdio.h>
int main()
{
printf("hello\n");
}
預編譯過程:
這個過程處理宏定義和include,並做語法檢查。
可以看到預編譯後,代碼從5行擴展到了910行。
gcc -E a.c -o a.i
cat a.c | wc -l
5
cat a.i | wc -l
910
編譯過程:
這個階段,生成彙編代碼。
gcc -S a.i -o a.s
cat a.s | wc -l
59
彙編過程:
這個階段,生成目標代碼。
此過程生成ELF格式的目標代碼。
gcc -c a.s -o a.o
file a.o
a.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped
鏈接過程:
鏈接過程。生成可執行代碼。鏈接分爲兩種,一種是靜態鏈接,另外一種是動態鏈接。使用靜態鏈接的好處是,依賴的動態鏈接庫較少,對動態鏈接庫的版本不會很敏感,具有較好的兼容性;缺點是生成的程序比較大。使用動態鏈接的好處是,生成的程序比較小,佔用較少的內存。
gcc a.o -o a
程序運行:
./a
hello
GCC的使用
http://blog.csdn.net/sshhbb/article/details/6705636
五、運行你的第一個linux程序。
直接命令行處輸入:./程序名 即可運行你linux平臺下的第一個C程序了。