13-1 可执行程序的编译过程

本文详细介绍了使用GCC编译器在Windows、Linux、Mac平台上将.c源代码编译成可执行程序的过程,包括预处理、编译、汇编和链接四个步骤。通过实例演示了如何利用gcc命令进行宏替换、生成汇编代码、目标文件以及最终的可执行程序。同时,文章提及了不同操作系统中目标文件的格式差异。
摘要由CSDN通过智能技术生成

1. 编译流程

        使用 gcc 编译器,将源代码 .c 文件一步一步编译至可执行程序。gcc 编译器在 Windows,Linux,Mac 均可正常编译。

         编译具体过程如下:                

                1)打开 msys 目录下的 mingw64.exe,跳转至待编译源码的目录。

                2)利用预处理器,将 .c 源代码文件转为 .i 宏替换后的源代码文件。gcc 编译器中输入以下代码实现宏替换。注意,01.hellowold.c 为 .c 文件名

gcc -E 01.hellowold.c -o 01.hellowold.i

                3)使用如下代码,将宏替换后的 .i 源代码文件使用编译器编译为汇编指令的 .s 文件

gcc -S 01.hellowold.i -o 01.hellowold.s

                4)将汇编指令 .s 文件编译为 .o 目标文件

gcc -c 01.hellowold.s -o 01.hellowold.o

        此时,目标文件已经不具备可读性(打开乱码),但可以通过 file 指令查看 .o 文件格式,为 COFF(common object file format)。而在 Linux 或 Mac 系统中,gcc 编译器编译出的 .o 文件,其格式通常为 ELF(executable linkable format)

                5).o 文件仍然不是可执行程序,此时还缺少链接器将源代码中使用的变量,库函数等与其实际的物理地址相连。使用 gcc 编译器,将 .o 文件通过链接器转为可执行程序,代码为:

gcc 01.hellowold.o -o 01.hellowold

                6)通过 file 指令查看该文件格式,可以发现 01.hellowold 为 PE32+ 的文件,这代表 Windows 系统下该文件为可执行程序。使用 ./ + 文件名运行该可执行程序,程序正常执行,输出 Hello, World!

        此外,在 5-1 小节也简单介绍过 C 语言编译过程和头文件展开(宏替换):https://blog.csdn.net/gltzlike/article/details/114327970

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值