第一个程序“Hello World !”

本文详细介绍了C程序从源代码到可执行文件的四个关键编译阶段:预处理、编译、汇编和链接。并通过具体示例展示了如何使用GCC编译器及其常用参数来完成这些步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

The Four Stages of Compiling a C Program

Click here for more

预处理 (Preprocessing) 阶段:(1.宏定义展开 2.头文件包含 3.条件编译)
gcc hello.c -o hello.i -E

编译 (Compilation) 阶段:(将c文件(.c)编译得到汇编文件(.s))
gcc hello.i -o hello.s -S

汇编 (Assembly) 阶段:(将汇编文件(.s)文件汇编得到二进制目标文件)
gcc hello.s -o hello.o -c

链接 (Linking) 阶段:(链接得到二进制可执行文件)
gcc hello.o -o hello.out

可执行文件的执行:
./hello.out

Linux中执行文件必须用全路径,或者可以展开为全路径的路径。

例如:
./a.out (在当前目录下必须有可执行文件a.out,如果没有则会出错,找不到该可执行文件)
/home/ubuntu/Destop/a.out

GCC 常用编译参数

  • -E :预编译处理

  • -S :预处理->编译 生成汇编文件

  • -c :预处理->编译->汇编 生成目标文件(但不链接)

  • -o :指定输出的目标名称

  • -g :添加调试信息

  • -I :指定头文件搜索路径

  • -L :指定链接库的路径

  • -l :指定链接库的名称

  • -D :编译时添加宏控制

  • -w :不生成任何警告信息

  • -M : 获得目标文件的依赖关系

  • -MM : 获得目标文件的依赖关系,不包含系统头文件的依赖关系

  • -MT : 获得目标文件的依赖关系,并指定目标名

  • -Wall :生成所有警告信息

  • -D :Click for more
    在Makefile文件里,我们会看到:
    gcc -D MACRONAME=MACRODEF 或者 gcc -D MACRONAME 或者 gcc -DMACRONAME
    这样就定义了预处理宏,编译的时候可选代码就会被编译进去了。
    对于GCC编译器,有如下选项:[-D macro=string]或者[–define-macro macro=string]
    -D macro=string,等价于在头文件中定义:#define macro string
    如:-D TRUE=true,等价于:#define TRUE true
    -D macro,等价于:#define macro 1,实际上也达到了定义:#define macro的目的。
    如:-D LINUX,等价于:#define LINUX 1(与#define LINUX作用类似)。

  • -On :指定优化级别(其中 n 的取值可以为:0、1、2、3 。Click for more)

    在实际的运用过程中,发现对于CPU密集型的程序来说,增加优化级别能够大幅缩短执行时间。比如下面给升级镜像增加OOB区域的数据(制作烧录镜像)。
    diff-Ox

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值