Linux开发工具之gcc编译器

Linux开发工具
  编译器-gcc
    gcc编译器的特点

1、可以编译多种语言                                                                        

2、是一款交叉编译器(在一个CPU平台下的编译可以在另一个CPU平台下运行,即gcc能够在当前CPU 平台上为多种不同体系结构的硬件平台开发软件)

    编译器的编译过程
      预处理
        主要用于头文件展开,宏替换,条件编译
          编译器只做预处理操作,预处理不做语法检查。命令为:gcc -E ***.c > ***.i(>重定向)
          我们所见过的头文件(系统的)目录都在cd /user/include/
          系统自带的头文件目录<>;我们自己创建的头文件“ ”,程序执行的时候现在当前执行目录下进行查找,查找不到再去系统头文件目录下查找,如果在查找不到就报错。
          全用“”编译效果慢
      编译
        主要用于语法检查、词法分析
          编译阶段停止,生成.o结尾的目标文件    命令:gcc -c 源文件名.c
      汇编
        主要用于把编译产生的目标文件转换成编译文件
          汇编阶段停止    命令:gcc -S 源文件名.c 
      链接
        生成符号表,用连接器把生成的目标代码和系统或用户提供的库连接起来,生成可执行文件
          命令:gcc 
    编译器的其他一些指令
      给可执行文件a.out 重起名字
        命令:gcc  源文件名.c -o 可执行文件名
      使用通配符*全部以某文件为前缀或后缀的文件全部删除
        rm -f 文件名.*
      统计文件处理时间 
        time ./可执行文件名
      多个文件的编译 
        gcc  源文件名1.c 源文件名2.c。。。-o 可执行文件名 

    编译器优化

  gcc -O1 源文件名.c -o 可执行文件名1
    基本优化,对代码分支、表达式、常量进行优化,在较短时间内将代码变得短小,降低内存占用率。但当一个庞大的程序细化拆分,反而会增加内存占用,系统会出现卡顿延迟。
  gcc -O2 源文件名.c -o 可执行文件名2
    进阶优化,进行更严格的细分,加入了寄存器的使用,虎将程序运行中的一些结果存放在寄存器中,提高效率。但是寄存价格昂贵,数量有限,一般不会存放在寄存器中。另一种将代码放入寄存器的方法是使用register修饰变量,便于频繁调用
  gcc -O3 源文件名.c -o 可执行文件名3
    非常强大,编译器会进行预测,会对循环结构中每一层进行预测,以便于拆分提高执行效率,用已有值替换未知值,用+替换*。缺点是会出现误差,导致程序错误和不可逆转的走向。一般不建议使用。

    编译器警告 
      去掉所有警告 
        gcc -w 源文件名.c -o 可执行文件名
      开启警告
        gcc -Wall 源文件名.c -o 可执行文件名
    ,h也就是声明函数不在同一个文件目录下
    编译器静态编译 static 
      在编译时,程序会优先选择动态库(但移植的话,动态库也要拷??)以依赖动态库+static优先选择静态库 
    库
      静态库和动态库的制作和使用
      libc.a/libc.so普通库    libm.a/libm.so数学库
        使用数学库命令:gcc 主函数名.c -lm
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值