Linux下變成的源碼要運行,必須先轉成二進制的機器碼。此時就需要編譯器,Linux系統下的Gcc(GNU C Compiler)是GNU推出的功能強大、性能優(yōu)越的多平臺編譯器,是GNU的代表作品之一。gcc是可以在多種硬體平臺上編譯出可執(zhí)行程序的超級編譯器,其執(zhí)行效率與一般的編譯器相比平均效率要高20%~30%。
Gcc編譯器能將C、C++語言源程序通過編譯、連接成可執(zhí)行文件,如果沒有給出可執(zhí)行文件的名字,gcc將生成一個名為a.out的文件。
比如,下面這段源碼(文件名叫做test.c)。
#include<stdio.h>
int main(void)
{
printf("Hello, world!\n");
return 0;
}
編譯則使用gcc命令,gcc命令提供了非常多的命令選項。
一. 常用編譯命令選項
假設源程序文件名為test.c。
1. 無選項編譯鏈接
用法:#gcc test.c
作用:將test.c預處理、匯編、編譯并鏈接形成可執(zhí)行文件。這里未指定輸出文件,默認輸出為a.out,如果需要執(zhí)行,內核中必須支持該文件的格式,默認一般都是elf可執(zhí)行程序
2. 選項 -o
用法:#gcc test.c -o test
作用:將test.c預處理、匯編、編譯并鏈接形成可執(zhí)行文件test。-o選項用來指定輸出文件的文件名。
3. 選項 -E
用法:#gcc -E test.c -o test.i
作用:將test.c預處理輸出test.i文件,預處理其實就是處理#預處理符號,比如#include, #define, #if, #ifdef, #error等
4. 選項 -S
用法:#gcc -S test.i
作用:將預處理輸出文件test.i匯編成test.s文件。匯編語言對應匯編指令,默認gcc編譯成x86指令,如果需要編譯arm架構的,就必須使用交叉工具鏈
5. 選項 -c
用法:#gcc -c test.s
作用:將匯編輸出文件test.s編譯輸出test.o文件,二進制文件就是101010機器碼
6. 無選項鏈接
用法:#gcc test.o -o test
作用:將編譯輸出文件test.o鏈接成終可執(zhí)行文件test。
如果需要修改Ubuntu的gcc版本,可以看一下你的Ubuntu安裝了哪些版本的gcc 用命令:ls /usr/bin/gcc* -l 顯示是
lrwxrwxrwx 1 root root 7 2017-08-14 15:17 /usr/bin/gcc -> gcc-4.6
-rwxr-xr-x 1 root root 302104 2017-09-17 05:43 /usr/bin/gcc-4.6
由上面顯示可以看出默認安裝的是gcc-4.6,現在來改成gcc-4.7
$ sudo apt-get install gcc-4.7
$ sudo apt-get install g++-4.7
刪除gcc-4.6的軟連接文件/usr/bin/gcc。(只是刪除軟連接)
命令:sudo rm /usr/bin/gcc
然后建一個軟連接,指向gcc-4.7。
命令:sudo ln -s /usr/bin/gcc-4.7 /usr/bin/gcc
然后可以通過命令:gcc -v 查看版本