编译器、调试器
编译器:GCC/CLANG
Linux、Mac下使用的编译器是不同的。
Linux下使用的是GCC编译器。
Mac下使用的是CLANG编译器。
命令格式都是相通的。
编译命令的基本格式:
-g会在输出文件里可以增加调试信息,编译出的程序在执行过程中出现的问题就可以用调试器进行单步调试。
-O实际是指令优化的级别。默认-O1是不对指令优化,所以调试过程中每步定义的临时变量是可以显示出来的。
-O2就会优化,按照它自己的理解让程序执行的更快。
而-o就是输出可执行程序的名字是什么。
-I 是使用第三方库或自己写的头文件放在其他目录下,需要指定-i让编译器去哪里找头文件。
-L指定的是第三方库的文件的位置。
-l代表具体使用哪个库。
编译器的编译过程:
- 预编译:将头文件与源代码合在一起。【没有真正编译,只是做准备工作】
- 编译
- 链接,动态链接/静态链接【生成的.o文件是中间文件,可执行文件的一部分,还需要与系统的库、第三方库链接到一起。】
生成库,mac上用libtool:
例如生成静态库
标准命名:lib+自定义名
调试器:
linux下:Gdb
mac下:LLDB
原理:
- 编译输出带调试信息的程序
- 调试信息包含:指令地址、对应源代码及行号
- 指令完成后,回调
C的内存管理:
对于搭建编译环境,可用docker pull下gcc进行编译。