Lunix编程开发基础

Lunix编程开发基础

前言

本文讲解如何在Lunix系统上进行编程开发,以C代码为例讲解如何对源代码进行编译,链接等,如何使用make工具和编写Makefile文件,以及如何对代码进行GDB调试,包括了在Lunix系统进行代码编程的一整套入门流程。现在虽然有比较好的Lunix集成开发工具,但是如果能够了解Lunix系统下代码的具体汇编,编译,链接,调试等各个阶段及其命令,一定是一个合格的Lunix开发人员的基础。

一、GCC编译器

  • 由编写的C语言源码到可执行的程序要经过下图所示的几个阶段。
    1.C代码源码*.c文件;=》2. 生成汇编代码;=》3.生成目标代码;=》4. 链接成可执行文件。
    在这里插入图片描述
  • GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。GCC的初衷是为GNU操作系统专门编写一款编译器,现已被大多数类Unix操作系统(如Linux、BSD、MacOS X等)采纳为标准的编译器,甚至在微软的Windows上也可以使用GCC。
    GCC常用对应C代码编译过程的各个阶段的命令如下,命令中的“*”代表文件名,具体以hello.c源代码为例进行展示。
# hello.c源代码
#include<stdio.h>
int main(void)
{
      printf("hello\n");
     return 0;
}

1.预编译过程,生成预处理后的文件*cpp。处理宏定义和include,去除注释,不会对语法进行检查。

gcc -E -o *.cpp *.c

在这里插入图片描述

2.编译过程,生成编译文件*.s。这个阶段,检查语法,生成汇编代码。

gcc -S -o *.s *.c  # 由源代码*.c直接生成汇编文件*.s

在这里插入图片描述
或者,

gcc -x cpp-output -S -o *.s *.cpp #由预处理代码*.cpp 生成 汇编代码 *.s

在这里插入图片描述
3.汇编过程,生成目标代码*.o。该阶段生成二进制机器代码,理论上可以执行,但是还没有与相关环境进行链接,因此还不能执行。

gcc -c *.c # 由源代码*.c直接生成目标代码*.o

在这里插入图片描述
或者,

gcc -x assembler -c *s -o *.o  #由汇编代码 *.s 生成 目标代码 *.o

在这里插入图片描述
4.链接过程,生成可执行代码。

gcc -o * *.c  # 由源代码*.c直接生成可执行程序 *

在这里插入图片描述
或者,

gcc -o * *.o #  #目标代码 *.o 生成 可执行程序

在这里插入图片描述

总结:以上四个过程只是将生成可执行程序的过程分解了,一般常用的是直接有源代码*.c生成可执行程序,即一句话完成: gcc -o hello hello.c

5.执行程序
在这里插入图片描述

二、make命令工具

在这里插入图片描述
在这里插入图片描述

三、Makefile组成结构

Makefile由多个目标组成,每个目标包含多个前置条件(其它目标),以及自己的命令。
make工具默认执行Makefile文件中的第一个目标。
Makefile就是将大量的代码编译命令(gcc命令和Shell命令)封装在一个文件中,通过make工具直接执行Makefile中的命令,方便代码的编译。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意,默认情况下,每个命令之前必须有一个tab键,不能用8个空格代替。

  • 为hello.c源代码编写Makefile文件如下
    在这里插入图片描述
  • 执行make工具,生成可执行程序
    在这里插入图片描述
  • 执行make工具,删除文件
    在这里插入图片描述

四、Makefile文件语法

在这里插入图片描述
在这里插入图片描述
关于 % 通配符可以参考这篇博文的详细讲解

  • 将hello.c 的Makefile修改为以%通配符进行编写,具体实现如下
    在这里插入图片描述
    其中,$<表示第一个前置条件
    在这里插入图片描述
    在这里插入图片描述

= 赋值运算法,指VARIABLE被赋予value的最新值
:= 赋值运算符,指VARIABLE被赋予value的初始定义值
?= 赋值运算符,值VARIABLE为空时才被赋予value的最新值
+= 赋值运算符,值连接运算符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
\ 表示 为同一条shell命令,因为每行命令在同一个shell中执行,没有继承关系
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、GDB代码调试

  1. 使用命令 gcc -g *.c -o *生成带有调试信息的可执行程序
gcc -g hello.c -o hello
  1. 使用 gdb ./hello装入调试程序
  2. 使用run启动程序
  3. 添加断点
    在这里插入图片描述
  4. 跟踪变量
    在这里插入图片描述
    Watch 变量:设置后,需要使用 continue(c)继续执行代码,如果watch变量发生变化,会自动打印出新值和旧值
    在这里插入图片描述
    Backtrace 最简单的是可以看到函数之间的调用关系。

六、后记

学习参考链接

要搬新的办公室了,说了快两年了终于实现了,换个新环境,希望能够一切顺利,顺利发paper,顺利毕业,顺利找到好工作…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mekeater

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

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

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

打赏作者

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

抵扣说明:

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

余额充值