C语言学习(六)GCC
1、GCC对程序的编译过程
GCC对程序的编译过程
解释:
源文件:指存放可编辑代码的文件
目标文件:指经过编译器编译生成的CPU可识别的二进制代码,一般不能执行
可执行文件:指目标文件与相关的库链接后的文件,可执行
编译过程:
预编译:将源程序.c中引用的头文件包含进源码中,并对一些宏进行替换
编译过程:将用户可识别的语言翻译成处理器可识别的操作码,生成目标文件.o,通常会翻译成汇编
链接:将所有的目标文件通过某种方式组合起来才能运行,形成可执行文件
【目标文件通常仅解析了文件内部的变量和函数,对于引用的变量和函数没有解析,这需要将其他已经编好的目标文件引进来将没有解析的变量和函数进行解析,通常引用的目标是库】
2、 linux下命令编译过程
2.1单个文件编译成可执行文件
1.不指定可执行文件名
gcc hello.c #gcc默认生成可执行文件为a.out ./a.out #运行
2.指定可执行文件名
gcc -o test hello.c #生成可执行文件test
./test #运行
2.2 编译生成目标文件
1.不指定生成目标文件名,则生成与源文件名相同
gcc -c hello.c
2.指定生成目标文件名
gcc -c -o test.o hello.c
3.一条命令编译多个源文件,生成多个目标文件
gcc -c file1.c file2.c
2.3 多文件编译
string.c
#define TT '\0' int StrLen(char *string) { int len=0; while(*string++!=TT) len++; return len; }
main.c
#include <stdio.h> extern int StrLen(char* str); int main(void) { char tt[100]; printf("请输入字符串:"); gets(tt); printf("您输入的字符串是:"); puts(tt); printf("字符串长度是:%d\n",StrLen(tt)); return 0; }
1.直接生成可执行文件
gcc -o test main.c string.c ./test
2.先生成目标文件,再链接
gcc -c main.c string.c gcc -o test main.o string.o
3.预处理
gcc -E string.c #将string.c文件预处理结果显示在屏幕上(将宏定义已经替换)
# 1 "string.c" # 1 "<command-line>" # 1 "/usr/include/stdc-predef.h" 1 3 4 # 1 "<command-line>" 2 # 1 "string.c" int StrLen(char *string) { int len=0; while(*string++!='\0') len++; return len; }
4.生成预处理文件
gcc -o string.i -E string.c #string.i文件内容如上