第十六课 编译器

编译器

在 mac 平台下,编译器是 GCC/CLANG

1
gcc/clang -g -O2 -o test test.c -I... -L... -l...
  • -g: 输出文件增加调试信息
  • -O: 指令优化级别,-O1 不优化,-O2 代表第二个级别优化。
  • -o: 可执行程序输出的名字
  • test.c: 在这里是源代码文件
  • -I: 指定头文件
  • -L: 指定库文件位置
  • -l: 指定使用哪个库

编译过程

  1. 预编译,将头文件与源代码合在一起,会形成一个新的文件
  2. 编译,生成 .o 文件,这是中间文件,是可执行程序的一部分
  3. 链接,将 .o 文件与第三方库/系统库链接到一起
1
2
3
4
5
6
// vim add.c

#include <stdio.h>
void add(int a,int b){
  printf("%d\n",a+b);
}
1
2
3
clang -g -c add.c
# 链接
libtool -static -o libadd.a add.o
1
2
// 创建 add.h 文件
void add(int a,int b);

调用文件

1
2
3
4
5
6
7
#include <stdio.h>
// 引号表示优先在本地目录搜索,也可以用尖括号指定位置
#include "add.h"
int main(){
  add(5,3);
   return 0;
}

编译

1
gcc -g -o test main.c -I . -L . -l add

调试

Mac 下是 lldb

Linux 下是 gdb

说明 命令 英文
设置断点 b break
运行程序 r run
单步执行 n next
跳入函数 s step
跳出函数 finish
打印内容 p print
退出 q quit
查看所有断点 break l break list

image-20221125141410879

使用 -g 加入调试信息,在目录下也会生成 test.dSYM 目录

1
dwarfdump test
Licensed under CC BY-NC-SA 4.0
本文阅读量 次, 总访问量 ,总访客数
Built with Hugo .   Theme Stack designed by Jimmy