C语言-gcc

GCC

  1. gcc(GNU Compiler Collection),是GNU组织为了编译Linux内核代码而开发一款C语言编译器,现在还支持c++、java等语言。

  2. gcc编译程序的主要过程

    • 预处理(Pre-Processing)

      将.c代码进行预处理,主要处理源文件的预处理指令

      # 生成以.i结尾的预处理文件 可指定生成文件名
      gcc -E hello.c <-o hello.i>
      
    • 编译 (Compiling)

      将上一步的.i文件转换成.s汇编代码

      # 生成以.s结尾的汇编文件
      gcc -S hello.i<-o hello.s>
      
    • 汇编 (Assembling)

      将上一步的.s文件翻译成二进制指令

      # 会生成以.o结尾的目标文件
      gcc -c hello.s <-o hello.o>
      # 也可直接省略上两步,直接-c生成目标文件
      
    • 链接 (Linking)

      将若干目标文件、库文件等链接起来生成可执行文件

      # 默认会生成a.out可执行文件
      gcc a.o b.o c.o ... 
      
      # 也可以使用-o指定可执行文件的名字。
      gcc hello.o -o hello
      
      # 执行程序
      ./hello 
      
      # 编译执行:
      gcc a.o b.o c.o && ./a.out
      

    粗略演示。。。
    在这里插入图片描述
    生成的hello.i文件(可以看到添加了很多命令)
    在这里插入图片描述

生成的hello.s汇编文件
在这里插入图片描述
生成的目标文件打开是乱码(不过我们不是机器,估计也看不懂吧哈哈,这里就不作演示)

  1. gcc常用参数

    选项说明
    -E预处理
    -S生成汇编文件
    -c生成目标文件
    -o设置编译结果的名字(.i/.s/.o)
    -I(大写i)设置要导入的头文件的路径
    -l(小写L)设置要链接的库名,例如:使用sqrt、pow等数学函数时就需要链接数学库 -lm
    -L设置要链接的库的路径
    -D在编译时定义宏
    -g编译时添加调试信息,这样编译出的程序可以用gdb调试。
    -Wall显示所有警告,编译器会以更严格的标准检查代码
    -Werror把警告当错误处理
    -std指定编译器要遵循的语法标准,c89,c99,c11,当前使用系统默认的是c99标准。
  2. 文件类型

    .h 头文件,里面是一些对.c文件的说明
    .c 源文件,里面是一些功能型代码
    .i 预处理文件
    .s 汇编文件
    .o 目标文件
    .gch 头文件的编译结果,用于检查自定义的头文件是否有语法错误,建议立即删除
    .a 静态库文件,相当Windows系统下的.lib文件
    .so 动态库文件,相当Windows系统下的.dll文件
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值