编译的概念:编译程序读取源程序,对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并按照操作系统对可执行文件格式的要求链接生成可执行程序。
编译的完整过程:c源程序——>预编译处理(.c)——>编译、优化程序(.s、.asm)——>汇编程序(.obj、.o、.a、.ko)——>链接程序(.exe、.elf、.axf等)
常用选项:
-E:只进行预处理,不编译,
-S: 只编译,不汇编
-L 指定要链接的动态库所在的路径,如果不指定,只在编译器的默认库路径下去找;
-l 指定include包含文件的搜索目录或所需链接库的库名, libxxxx.so 或 libxxxx.a , -lxxxx
-c:只编译、汇编,不链接
-g:包含调试信(使用-g后可用gdb命令调试程序)
-o:输出成指定文件名
-ansi:ANSI标准
-std=c99:c99标准
-Werror:不区分警告和错误,遇到任何警告都停止编译,
-Wall:开启大部分警告提示
注:当你需要你的代码非常严谨时,加上-Werror和-Wall,会让你如虎添翼。