Linux下变成的源码要运行,必须先转成二进制的机器码。此时就需要编译器,Linux系统下的Gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%。
Gcc编译器能将C、C++语言源程序通过编译、连接成可执行文件,如果没有给出可执行文件的名字,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预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out,如果需要执行,内核中必须支持该文件的格式,默认一般都是elf可执行程序
2. 选项 -o
用法:#gcc test.c -o test
作用:将test.c预处理、汇编、编译并链接形成可执行文件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链接成终可执行文件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 查看版本