如何在 Linux上编写第一个程序 Hello World

 🌈 欲买桂花同载酒,终不似,少年游

 🔥 个人主页:嵌入点滴

 ❤️ 感谢大家点赞👍🏻收藏⭐评论✍🏻

一 . 使用GCC编译器

        GCC是GNU编译器套件(GNU Compiler Collection)的缩写。它是一个用于编译程序的开放源代码编译器,支持多种编程语言,如C、C++、Objective-C、Fortran等。GCC是一个非常流行的编译器,被广泛用于各种操作系统以及嵌入式系统开发中。GNU编译器套件包括多个编译器和工具,如GCC、GDB(调试器)、Binutils等,提供了一个完整的开发环境。

        Ubuntu一般默认自带GCC,在终端输入 gcc -v 命令查看 GCC 版本信息,如果没有按提示信息输入命令安装GCC即可。

5fe9d76ecabb4061ba24cb7420bee2f9.png

输入 sudo apt install gcc 命令安装

安装完毕后再次输入 gcc -v 便可查看版本信息。

e077b5f5c1704ddfb123c41055738895.png

二 . GCC 的基本用法

格式:gcc 选项  编译的源文件 指定输出文件名

比如:gcc [options] file1.c file2.c -o output

其中,gcc是编译器命令,[options]是编译选项,file1.cfile2.c是要编译的源文件,-o output是指定输出文件名。

常用的编译选项包括:

  • -c:只编译不链接,生成目标文件
  • -o:指定输出文件名
  • -Wall:显示所有警告信息
  • -g:生成调试信息
  • -O:优化编译
  • -std=c99:指定C语言标准

首先我们创建一个文件:

vi hello.c

打开vim插入模式编写程序:

#include <stdio.h>

void main(void)
{
        printf("Hello World!\n");
}

按:wq 保存退出。

将文件 hello.c 变成可执行文件

gcc hello.c -o hello

7c40ed01c54748e9bbb93fd5e9407fc3.png

运行可执行文件 hello

./hello

( ./ 的意思为在当前目录找 hello 文件并执行)

5ac55ea7bdb24d62b43b29e694b59c1e.png

还可以使用如下命令编译hello.c文件并直接生成可执行文件Hello

gcc -o Hello hello.c

f1f936a6515546ce87dd803a65048bae.png

如果我们不使用 -o 参数指定我们生成文件的名称,直接输入 gcc hello.c 编译完会得到一个 a.out 文件,执行这个 a.out 的结构和执行 hello 是一样的。

gcc hello.c 

9dc3f5e3a9e24e4e988a40fb98b89b3b.png

需要注意的是使用GCC编译器编译出来的可执行文件是 X86 的,不能再 ARM 开发板上运行,可以使用 file 命令来查看文件类型。

file hello

0a171b5e807546179fc5a0801b10a8b2.png

三 . 编译流程

从 hello.c 编译得到 hello 或者 a.out 需要经历四个步骤,分别是:

预处理,编译,汇编,链接

hello.i         预处理得到的 C语言代码

hello.s        汇编语言文件

hello.o        目标文件

第一阶段:

        预处理阶段,编译器会对头文件或者宏定义进行展开,或者条件编译的选择,我们可以使用 -E 参数得到预处理文件。

-E:只对文件进行预处理,不编译和链接。

gcc -E hello.c -o hello.i

829658aff4cf420e9d82acb4a2175679.png

我们 vi hello.i 进入查看,里面都是变量,函数预处理的结构。

 vi hello.i

a006bccffc4c47b0b58dc6842e397a64.png

第二阶段:

        编译阶段,把文件编译成汇编代码,-S 参数得到汇编代码文件。

-S:将 hello.i 文件编译成 hello.s 文件

 gcc -S hello.i -o hello.s

531a452589514d748c04df682d3f1c92.png

vi hello.s

71f83007ca1b4355a4227f62d2fe1f34.png

第三阶段:

        汇编阶段,把汇编文件编译成机器码,只编译不链接,生成目标文件,使用 -c 参数。

-c:可以把 hello.s 文件编译成 hello.o 文件。

b491dfcf8e114929bac306401c9655b7.png

第四阶段:

        链接,直接把目标文件编译成可以执行的文件。

gcc hello.o -o hello

a2d727cea3c54b41b830f59c3dbcf849.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入点滴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值