編譯C
首先,程序編譯過程有:
1.預處理(展開宏,頭文件,檢查代碼是否有誤)
2.編譯(將.c轉為匯編代碼.s)
3.匯編(將匯編代碼.s轉為機器代碼.o)
4.鏈接(將所有機器代碼.o和庫文件鏈接成一個可執行程序)
一般編譯常常包括了:預處理,編譯,匯編
在linux系統中,編譯c使用gcc編譯器,如下:
gcc -o out in1.c in2.c //gcc編譯以及鏈接(對in1文件和in2文件進行編譯生成out.bin文件,“-o”:表示生成可執行文件) gcc -c in1.c in2.c -o out.o //gcc編譯不鏈接(對in1文件和in2文件文件進行編譯生成out.o文件,
“-c”:表示只生成*.o文件 第二個"-o":表示制定生成哪個.o文件)
(若只對單個文件編譯及鏈接,也可以直接輸入: gcc in.c, 系統默認編譯生成a.out可執行文件)
若需要在arm板里運行,就需要在linux系統中使用arm-linux-gcc交叉編譯才行:
arm-linux-gcc -o out in1.c in2.c //gcc編譯以及鏈接(對in1文件和in2文件進行編譯生成out.bin文件,“-o”:表示生成可執行文件) arm-linux-gcc -c in1.c in2.c -o out.o // gcc編譯不鏈接(對in1文件和in2文件文件進行編譯生成out.o文件,
“-c”:表示只生成*.o文件 第二個"-o":表示指定生成哪個.o文件)
-I //表示添加頭文件位置
一般編譯程序時,說找到不到某個頭文件時,編譯時直接加上"-I 該頭文件目錄",即可編譯OK
-l //指定庫文件,l后面緊跟庫文件,比如數學庫:-lm,對應着libm.so文件,只需要去掉lib和.so即可
編譯程序時,一般說找不到某函數定義時,說不定就是沒加庫文件原因,比如找不到cos()函數定義,則編譯時直接加上"-lm"即可
編譯C++
方法和上面類似,使用g++編譯器,只不過該編譯器會自動鏈接C++庫
注意:若需要c++11標准,需要gcc 4.8以上
以編譯兩個C文件(a.c和hello.c)為示例:
vi a.c //編輯a.c , 它將被hello.c調用,前提是這兩個文件必須在同一目錄下
內容如下:

vi hello.c //編輯hello.c
內容如下:

gcc -o hello hello.c a.c //gcc編譯以及鏈接(對hello.c文件和a.c文件進行編譯生成hello.bin文件,“-o”:表示生成可執行文件)
./hello //運行hello.bin
效果如下所示:

