泉州微信网站建设公司,帝国做的网站,wordpress制作友情链接,百度域名的ip【LittleXi】C程序预处理、编译、汇编、链接步骤
C程序
#includestdio.h int main(){int x1,y1;printf(xy%d,xy);
}1、预处理
将头文件引入进来、除去注释、宏定义下放
执行指令
g -E esc.c -o esc.i
2、编译
将处理好的代码编译为汇编代码.s
执行…【LittleXi】C程序预处理、编译、汇编、链接步骤
C程序
#includestdio.h int main(){int x1,y1;printf(xy%d,xy);
}1、预处理
将头文件引入进来、除去注释、宏定义下放
执行指令
g -E esc.c -o esc.i
2、编译
将处理好的代码编译为汇编代码.s
执行指令
g -S esc.i -o esc.s
3、汇编
将编译好的.s文件转为机器码.o
执行指令
g -c esc.s -o esc
4、链接
链接是将多个目标文件和库文件组合成最终的可执行文件的过程。链接器如GNU链接器通常称为ld执行这一过程解决了不同目标文件之间的符号引用关系将它们连接在一起。主要任务包括解析符号引用、符号解析、符号重定位、生成可执行文件。如果使用了外部库如标准C库链接器还会将所需的库文件与程序一起链接以满足程序的依赖性。
执行指令
g esc.o -o esc 5、补充也可以自己写Makefile文件示例如下
文件main.c
// main.c
#include stdio.h
#include library.hint main() {int result add(3, 5);printf(Result: %d\n, result);return 0;
}文件library.h
// library.h
#ifndef LIBRARY_H
#define LIBRARY_Hint add(int a, int b);#endif文件library.c
// library.c
#include library.hint add(int a, int b) {return a b;
}Makefile文件
CC g
CFLAGS -Wall -stdc11
SRC main.cpp library.cpp
OBJS $(SRC:.cpp.o)
TARGET mainall: $(TARGET)$(TARGET): $(OBJS)$(CC) $(CFLAGS) $^ -o $%.o: %.cpp$(CC) $(CFLAGS) -c $ -o $clean:rm -f $(OBJS) $(TARGET).PHONY: all clean解释
CC g 这一行定义了一个Makefile变量 CC它指定了C编译器的名称。在这个示例中我们使用 g 作为C编译器。 CFLAGS -Wall -stdc11 这一行定义了一个Makefile变量 CFLAGS它包含了编译选项。-Wall 表示启用所有警告-stdc11 指定了C11标准。 SRC main.cpp library.cpp 这一行定义了一个Makefile变量 SRC包含了项目的所有源文件的名称。 OBJS $(SRC:.cpp.o) 这一行定义了一个Makefile变量 OBJS它是 SRC 中所有源文件的目标文件的列表。.cpp 文件扩展名被替换为 .o 文件扩展名。 TARGET main 这一行定义了一个Makefile变量 TARGET表示最终的可执行程序的名称。 all: $(TARGET) 这是一个Makefile规则表示 all 是默认的目标。当你运行 make 命令时它将构建 $(TARGET)。 $(TARGET): $(OBJS) 这是一个Makefile规则定义了如何从目标文件构建可执行程序。$(OBJS) 表示依赖于目标文件列表。规则中的命令 $(CC) $(CFLAGS) $^ -o $ 使用 g 编译器编译目标文件并将其链接为可执行程序。 %.o: %.cpp 这是一个Makefile规则定义了如何将每个源文件编译成对应的目标文件。%.o 表示所有的目标文件%.cpp 表示对应的源文件。规则中的命令 $(CC) $(CFLAGS) -c $ -o $ 编译每个源文件为对应的目标文件。 clean 这是一个Makefile规则用于清理生成的目标文件和可执行程序。命令 rm -f $(OBJS) $(TARGET) 删除目标文件和可执行程序。 .PHONY: all clean 这一行告诉Make工具all 和 clean 是伪目标不代表实际文件因此不会检查它们的时间戳。这样可以确保 make 始终执行这两个目标而不受文件时间戳的干扰。