• 在Linux环境下运行你的第一个C语言程序


    1、前言

    今天是入职的第一天,在公司从事SOC的开发,需要用到Linux的知识,所以开始和大家一起学习Linux的编程,使用Linux运行我们的第一个C语言程序。

    2、环境配置

    1.1 安装编辑器

    使用语句:sudo apt-get install vim 安装 vim,可以在安装前查看是否安装vim编辑器。(特别提示:在安装vim前最好将软件更新,使用指令sudo apt-get update)之所以要加sudo的原因是这些安装和更新软件的时候需要使用管理员权限才可以进行。

    1.2 安装gcc编译器

    和安装 vim 类似使用 sudo apt-get install gcc ,安装完成后可以使用cc-v来查看编译器版本信息等。cc -v界面如下:

    3、编写第一个C程序

    在我们编写第一个C程序之前我们需要先新建一个文件夹,用于储存我们的工程,下面是新建文件的详细教程:

    3.1 新建文件夹

    我们在Linux中新建文件夹主要有两种方式,如果你的Linux是桌面版本的话,就可以像在Windows环境下一样,通过在文件夹右键进行新建。如果我们的Linux版本不是桌面版,那么只能通过指令进行新建文件夹。

    创建文件夹前可以使用 指令 ls 来查看该系统中有哪些文件。然后使用 mkdir+文件名 创建文件,并且查看该文件是否被创建。(假如创建了一个名字为 Workspace 的文件 mkdir workspace)进入该文件则使用命令 cd workspace 然后就进入该目录。然后再创建一个文件名为les1 的文件(mkdir les1)。进入les1文件(cd les1)。创建一个.c文件:touch main.c

    3.2 编辑该文件

    输入 vi main.c 进入文档编辑界面,按i或者 insert 键进入插入模式,然后编写一个c程序:

    #include <stdio.h>
    
    int main()
    {
            printf("hello word!\n");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    esc 键退出插入模式,然后输入 :wq 保存并退出,
    这时候你就能在文件夹里发现 hello.c 这一文件,但这只是一个脚本,想要运行该脚本,必须通过编译,生成一可执行文件。

    3.3 编译mian.c

    上文提到,gcc编译工具主要完成c语言源程序到可执行文件的转换,那么gcc编译器到底如何使用呢。

    首先来了解gcc命令的语法格式:

    gcc 语法格式:gcc [选项] 参数
    
    gcc 命令的主要选项及作用:
    
    [-o] 指定目标文件的名称
    
    [-g] 使生成的可执行程序中包含debug信息
    
    [-c] 只编译不链接。(c就是compile)
    
    [-E] 只做预编译处理。
    
    [-S] 由C翻译成汇编
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在选项省略的情况下,gcc是最简单的使用方式。

    编辑完成后,在命令终端输入命令:gcc main.c 。这时会生成一个名为 a.out 的可执行文件,但是不推荐使用该方法进行编译。

    若想指定可执行文件名称为 main’ ,则在命令终端输入命令:gcc -o main main.c

    通过 ls 命令可以发现多出了一个名为:main 的文件,我们可以通过语句 ./main 语句运行我们的程序,可以发现我们的程序进行了正确输出:

    jamesbin@jamesbin:~/libin/third_make$ gcc main.c -o main
    jamesbin@jamesbin:~/libin/third_make$ ls
    main  main.c
    jamesbin@jamesbin:~/libin/third_make$ ./main
    hello word!
    jamesbin@jamesbin:~/libin/third_make$
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    可以看到我么已经成功输出了 hello word!

    4、gcc编译过程详解

    第1步:预编译阶段。

    该阶段主要是处理源文件中所有的伪指令,包括宏定义、头文件包含等,gcc会将头文件及宏定义的内容全部展开到当前文件中。

    命令:gcc -E -o main.i main.c

    其中 main.i 就是预编译后生成的中间文件,可以使用 vi 打开 main.i ,查看其内容。

    第2步:编译阶段

    在该阶段,编译器完成c语言到汇编语言的转换

    命令:gcc -S -o main.s main.i 或者直接gcc main.i -S 也会生成main.s文件
    
    (问题:直接gcc main.i -s会生成a.out文件,也可以正常执行)
    注意:选项中S为大写,不能用小写
    
    #测试:
    jamesbin@jamesbin:~/libin/third_make$ gcc main.i -S
    jamesbin@jamesbin:~/libin/third_make$ ls
    main.c  main.i  main.s
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    这样在当前目录下就生成了一个 main.s 文件(文件内容为汇编语言)。

    第3步:汇编阶段

    该阶段是将汇编语言翻译成二进制目标代码。

    命令:gcc -c -o main.o main.s
    
    • 1

    执行命令后,会在当前目录下生成名为main.o的二进制文件

    #查看二进制文件
    od main.o
    
    • 1
    • 2

    第4步:链接阶段

    在该阶段链接器将多个目标代码文件(以后还可能和库文件)进行链接,最终生成可执行文件。

    输入命令:gcc main.o ,会生成一个名为 a.out 的可执行文件

    输入命令:gcc -o main main.o ,会生成一个名为 main 的可执行文件。

    执行a.out或main文件,在终端输入./a.out或./main

    通常情况下,我们将前三步统称为编译阶段,将最后一步成为链接阶段。

    👇点击下方公众号卡片获取资料👇
  • 相关阅读:
    ArrayList源码解析
    算法--判断矩阵经轮转后是否一致
    a标签_文件下载(download属性)
    信息系统项目管理师 12题
    解锁AI大模型秘籍:未来科技的前沿探索
    JOSEF 同步检查继电器 JT-1 额定电压100V 柜内固定安装,板前接线
    ChatGPT 实际上是如何工作的?
    HBase 与 Hive 的对比
    asp.net core中间件预防防止xss攻击
    构造方法中的this应用及注意事项
  • 原文地址:https://blog.csdn.net/qq_45172832/article/details/125495981