GCC入门小结

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
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值