gcc的简单使用

本文档详细介绍了GCC编译器的使用,包括编译概述、格式、常用选项、优化器如-O0到-O3级别的优化,以及架构相关优化和调试选项。还提及了配套的size、objdump和nm等工具,帮助理解目标文件中的符号。
摘要由CSDN通过智能技术生成

1 概述

══════


  GNU编译工具集(即GCC)包含一个编译器和一套将高层源码生成二进制文件的工具
  集。GCC不仅是GNU/Linux上事实上的编译器,还是嵌入式系统开发的标准编译器。
  这里只是简单的了解下GCC的基本特点和一些高级特点(如优化),GCC的全部功能
  还需要去看官方的文档。[http://gcc.gnu.org/]




2 编译简介

══════════


  阶段:预编译—>编译—>汇编—>链接各编译阶段的输入与输出:
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   阶段    输入  输出  GCC示例                 
   预编译  *.c   *.i   gcc -E test.c -o test.i 
   编译    *.i   *.s   gcc -S test.i -o test.s 
   汇编    *.s   *.o   gcc -c test.s -o test.o 
   链接          *.o   gcc test.o -o test      
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


  在预处理阶段,源文件和包含的头文件一起处理。在这一些阶段,对#ifdef这类
  的预编译指令进行解析,然后通过编译阶段的编译为汇编做准备,在汇编阶段,
  文件转化为相应的机器指令,生成目标文件。最后将这些机器码链接起来(有可
  能与其他机器码链接)形成可执行的二进制文件。




3 GCC的格式

═══════════


  将源文件编译成可执行文件:$ gcc test.c -o test这样就生成了一个test的可
  执行文件(-o 就是输出选项)。如果希望生成源文件的目标文件,可以使用-c选
  项$ gcc -c test.c这样生成的目标文件默认为test.o,也可以强制要求生成其他
  名字。$ gcc -c test.c -o newtest.o当有多个源文件时, 使用下面的命令能
  够将三个源文件编译并链接为一个名为 goal的可执行文件$ gcc -o goal
  first.c second.c third.c注意:如果只是把一个源文件编译为目标文件,那么
  因为链接还没有开始,所以源文件不需要一定有main函数。




4 有用的选项

════════════


  1.在很多情况下,保存头文件的目录与保存源文件的目录不是同一个。如:源程
  序保存在./src中,头文件在./inc中。我们可以在./src目录中编译程序,告诉
  gcc头文件在./inc中。$ gcc test.c -I ../inc -o test可以重复使用I格式来
  指定包含多个子目录: $ gcc test.c -I ../inc —I ../../inc2 -o test 2.为
  了配置软件,可以在编译的时候指定符号常量如在源文件或头文件中定义符号常
  量:#define TEST可以在命令行中使用-D定义:$ gcc -D TEST test.c -o test
  3.用于汇编而不用于源码编译阶段的选项,如:$ gcc -c -g -Wa, -ahl, -L
  test.c -Wa选项将后续选项直接传递到汇编阶段供汇编器使用。




5 编译警告

══════════


  最常用的检查普通警告的选项是-Wall,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值