1.编译过程 :预处理—>编译—>汇编—>链接
gcc -E hello.c -o hello.i—>
gcc -S hello.i -o hello.s—>
gcc -c hello.s -o hello.o—>
gcc hello.o -o hello
或者
cpp hello.c > hello.i —>
gcc -S hello.i -o hello.s—>
as hello.s —>
gcc hello.o -o hello
如果想在一次性编译过程中保留 .i .s .o可用 -save-temps
gcc -Wall -save-temps hello.c -o hello
2.预处理 ①宏
#define
#include
#ifndef #endif
#if 0.....#endif 可用于注释掉某些东西
-D__=... 可用于将源程序中未赋值的宏指令赋值替换
gcc -Wall -DTEST=123 hello.c -o hello.o
②头文件搜索:三种方法
将.h放进系统标准头文件库中;
利用-I;
利用环境变量:C_INCLUDE_PATH 涉及到 env | grep ,export
3.编译 -Wall -Wcomment -Wreturn-type -Wformat -Wunsued -Wimplicit
4.汇编
5.链接 ①标准库的搜索
②用户自定义静态库的建立与搜索:建立 ar cr hello1.o hello2.o libhello.a
查看 ar t libhello.a
搜索:三种方法①放入标准库②-L -l
③环境变量 LIBRARY_PATH=.../..:LIBRARY_PATH
6.debug ①编译过程加入-g ②产生core:ulimit -c ,ulimit -c unlimited ③ gdb a.out core
④print 变量 ,backtrace
7.优化 ①源码优化:CSE FI LU ②Scheluding 增加执行速度但编译须更长时间
③优化等级:-O0~-O3 gcc -Wall -O2 hello.c -o hello
④time ./a.out
⑤优化不利于debug 但是有时候可以帮助检查一些错误
8.一些工具 file(ELF LSB not stripped) nm (T U) ldd(动态链接库)
gprof 用于查看函数被调用的次数与执行的时间
执行步骤:
gcc -Wall -pg hello.c
./a.out
gprof a.out
gcov 用于查看源程序中各行的执行次数
执行步骤:
gcc -Wall -fprofile-arcs -ftest-coverage hello.c
./a.out
gcov hello.c
cat hello.c.gcov 或者 grep "#####" *.gcov