基本信息
系统/内核
Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-45-generic x86_64)
测试代码
#include <stdio.h>
int main(void)
{
float salary;
printf("\aEnter your desired monthly salary:");
printf(" $_______\b\b\b\b\b\b\b");
scanf("%f", &salary);
printf("\n\t$%.2f a month is $%.2f a year.", salary, salary * 12.0);
printf("\rGee!\n");
return 0;
}
*注:.2f
表示浮点数小数点后有效位数为2
在Ubuntu里编译该代码
需要先安装必要的环境与工具,Ubuntu下有一条命令可以直接安装,非常方便:
sudo apt-get install build-essential
将代码写入c文件
vim salary.c
GCC编译C程序的主要有四个步骤:预编译(Preprocessing)、编译(Compilation)、汇编(Assembly)、链接(Linking/Build),下面进行分步操作。
预编译
gcc -E salary.c -o salary.i
该步骤会对各种如头文件等预处理指令进行处理,该步骤不会检查代码的完整性与正确性,其中E选项必须大写
,表示对.c
文件进行预编译,-o
输出名为salary的.i
文件。
编译
gcc -S salary.i -o salary.s
该步骤会首先检查代码的完整性与正确性,通过将进行编译,否则将报错。S
选项命令gcc对.i
文件进行编译,同样必须大写
。
汇编
gcc -c salary.s -o salary.o
该步骤的c
选项将.s
汇编语言转换为机器可执行的二进制代码。
链接
gcc salary.o -o salary
该步骤下gcc编译器会将各个二进制模块和动态库、静态库进行链接操作,得到可执行文件salary
。
最后执行 ./salary
运行程序。
总结
gcc salary.c -o salary
了解该过程后,实际上可以直接输入以上命令,gcc会自动完成上述的四个步骤。
附gcc基本命令
//无选项编译链接
gcc test.c //将.c预编译、编译、汇编并链接形成可执行文件
//带o选项的编译链接
gcc test.c -o test //将.c预编译、编译、汇编并链接形成可执行文件,并以test命名
//O选项
gcc -O1 test.c -o test //使用O选项选择编译优化级别,可取1~3,越大越好且时间越长
//E选项
gcc -E test.c -o test.i //使用E选项将.c预编译成.i,并以test命名
//S选项
gcc -S test.i -o test.s //使用S选项将.i编译成.s,并以test命名(-o可省略)
//c选项
gcc -c test.s -o test.o //使用c选项将.s汇编成.o,并以test命名(-o可省略)
//o选项
gcc test.o -o test //将.o文件进行链接,并以test命名生成可执行文件
上代码中部分-o
可以省略,但为了代码的易读性和一致性,建议养成命名的习惯
亦可以同时编译多个文件
//同时编译并链接
gcc test1.c test2.c -o test
//分开编译并链接
gcc test1.c -o test1.o
gcc test2.c -o test2.o
gcc test1.o test2.o -o test_overall