Linux系统上C程序的编译与调试

一、环境配置

在Linux操作系统(ubuntu)中,打开终端,以管理员root模式登录
1.更新:输入命令apt update
2.下载vim:输入命令apt install vim -y
3.下载gcc:输入命令apt install gcc -y
4.下载g++:输入命令apt install g++ -y
5.下载make:输入命令apt install make -y
安装成功:
在这里插入图片描述

二、建立c程序

【例1】输出Hello word!

1.先在进入自己要建立文件的目录,然后建立一个.c文件:

比如说,这里建立一个main.c文件

在这里插入图片描述
2.通过vi,打开main.c文件vi main.c

在这里插入图片描述
(1)进入vi,此时处于命令模式,命令模式,不可以进行一般输入操作。
在这里插入图片描述

(2)输入i进入插入模式

示例:

在这里插入图片描述

处于插入模式时,可以进行输入操作:

在这里插入图片描述

输入完成之后,按Esc返回命令模式:

在这里插入图片描述

(3)输入进入末行模式:

在这里插入图片描述

(4)输入wq,按回车保存退出:

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

三、编译C程序

当在main.c中写入一段代码之后,在终端输入gcc -o main main.c去编译main.c文件:

在这里插入图片描述
这时,可以看到在当前目录下,生成了一个可执行程序main,当我们用ls -l去查看的时候,发现这个生成的文件具有可执行权限,也就是说它可以运行。

四、执行C程序

输入可执行程序的路径就可以执行所要执行的C程序:
在这里插入图片描述

相当于:
在这里插入图片描述

五、c程序的编译链接过程

c语言的源程序的后缀必须为.c,源文件是在硬盘上存放着它可以持久存储。C语言.c程序是无法直接执行的,必须要经过编译链接生成一个能够在计算机上执行的二进制可执行程序,这样才能运行这个二进制可执行程序。可以通过gcc -o main main.c将无法执行的.c程序转换为可执行的二进制程序main。

程序编译的过程分为4步:预编译、编译、汇编和链接。通过这四步将高级语言翻译成机器指令(二进制),在计算机上可以直接执行的就是最终的二进制机器指令。
在这里插入图片描述

【例】进入vi写一个初始化数组的C语言代码并保存

在这里插入图片描述

1.预编译阶段

(1)删除所有的“#define”,并且展开所有的宏定义;
(2)处理所有的条件预编译指令,“#if”、“#ifdef”、“#endif”等;
(3)处理“#include”预编译指令,将被包含的文件插入到该预编译指令的位置;
(4)删除所有的注释;
(5)添加行号和文件名标识,以便于编译器产生调试用的符号信息及编译时产生编译错误和警告时显示行号;
(6)保留所有的#pragma编译器指令,因为编译器需要使用它们。

示例:

在删除main文件之后,预编译当前的main.c文件,通过gcc -E main.c -o main.i预编译main.c文件并显示结果,可以看到main.i文件被生成了:

在这里插入图片描述

通过vi打开这个main.i文件:

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

可以看到include文件被全部展开,宏被也被展开,注释也被删除了

2.编译阶段

词法分析、语法分析、语义分析,代码优化,汇总符号。

示例:

通过gcc -S main.i -o main.s,将预编译生成的文件main.i转换为编译完成的文件main.s,并用vi打开这个main.s文件:

在这里插入图片描述

main.s文件中都是汇编代码:

在这里插入图片描述

3.汇编阶段

将汇编指令翻译成二进制格式,生成各个section,生成符号表。

示例:

通过gcc -c main.s -o main.o,将编译阶段生成的文件main.s转换为汇编完成的二进制机器指令main.o,并用vi打开这个main.o文件:
在这里插入图片描述
main.o文件是二进制机器指令:
在这里插入图片描述
上图中的ELF是该文件的格式。

main.o虽然是二进制指令文件,但是不可以执行,因为当前的main.o是把我们自己写的main.c文件翻译成了二进制的指令,main.o此时只是我们整个程序的一部分,因为我们自己写的代码用到了别人的许多代码,比如说priintf,是我们没有自己实现的,#include<stdio.h>中只是放了printf的声明,printf的实现是在C的库函数中,所以最后要将它链接过来,才可以运行起来。因此,最终的可执行程序除了自己已经写的代码以外,还链接了一些都会用到的基础代码。库里边放的其实就是已经编译好的.o文件。

4.链接阶段

(1)合并各个section,调整section的起始位移和段大小,合并符号表,进行符号解析,给符号分配虚拟地址 .
(2)符号重定位 。

示例:

通过gcc -o main main.o,将汇编阶段生成的文件main.o转换二进制可执行程序,并用vi打开这个main文件:

在这里插入图片描述

main文件是二进制可执行文件:

在这里插入图片描述

六、一般的编译写法

1.两步走

先通过gcc -c main.c一步生成.o文件,然后再通过gcc -o main main.o.o文件转换为可执行文件main,并执行它:

在这里插入图片描述

2.一步走

直接通过gcc -o main main.c一步生成可执行文件main,并执行:

在这里插入图片描述

  • 11
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要安装Linux Mint系统并编辑、编译调试程序,首先要下载安装Linux Mint系统,然后安装必要的编辑器,如Vim、Emacs等,以及编译器,如gcc、g++等。然后可以使用编辑器编辑源代码,使用编译编译程序,最后利用调试调试程序,以获得最终运行结果。 ### 回答2: 安装Linux Mint系统是一项相对简单的任务,以下是安装步骤: 1. 下载Linux Mint的安装镜像文件,通常是一个ISO文件。 2. 制作安装介质,可以是刻录成光盘或者制作成USB启动盘。 3. 将安装介质插入电脑并重启计算机。 4. 进入计算机的BIOS设置,将启动顺序调整为先从光盘或者USB启动盘启动。 5. 重启计算机,按照提示选择安装Linux Mint系统。 6. 在安装过程中,选择适当的语言和时区,设置用户名和密码等信息。 7. 选择安装方式,可以选择与其他操作系统共存,或者覆盖原有系统。 8. 等待安装完成,重启计算机。 安装完成后,在Linux Mint系统中可以使用自带的文本编辑器(如gedit)来编辑、编译调试程序。下面是一个简单的例子,以C语言为例: 1. 打开终端,输入以下命令来安装gcc编译器: ``` sudo apt-get install build-essential ``` 2. 创建一个新的C语言源文件,比如hello.c,例如使用gedit编辑器: ``` gedit hello.c ``` 3. 在打开的文本编辑器窗口中,输入以下代码: ```c #include <stdio.h> int main() { printf("Hello, World!\n"); return 0; } ``` 4. 保存文件并关闭文本编辑器。 5. 在终端中使用gcc编译编译源代码并生成可执行文件,比如使用以下命令: ``` gcc -o hello hello.c ``` 6. 运行生成的可执行文件,例如使用以下命令: ``` ./hello ``` 7. 在终端中会显示输出结果,即 "Hello, World!"。 这样,你就成功编辑、编译调试了一个简单的C语言程序。 ### 回答3: 安装Linux Mint系统是一个比较简单的过程。首先,你需要准备一个空的USB闪存驱动器或者光盘,并下载最新的Linux Mint.iso镜像文件。然后,根据你的设备选择UEFI或者Legacy模式来引导系统。接下来,按照屏幕上的指示进行安装。在分区的过程中,你可以选择删除旧的操作系统,或者将Linux Mint安装在另一个分区。 安装完毕后,你可以使用自带的文本编辑器如gedit、nano或者vim来编辑编译调试程序Linux Mint系统已经预装了许多常用的开发工具,如GCC编译器。你可以在终端中运行以下命令来确认GCC是否已经安装: gcc -v 如果GCC未安装,你可以运行以下命令来安装它: sudo apt-get install build-essential 编辑程序可以使用任何文本编辑器,如gedit。你可以使用以下命令在终端中打开gedit: gedit 然后,在gedit中编写你的程序代码,并保存文件。假设你保存的文件名为example.c。 调试程序可以使用GNU Debugger(GDB)来进行。GDB是一个非常强大的调试工具,可以帮助你检测和修复程序中的错误。你可以使用以下命令安装GDB: sudo apt-get install gdb 运行GDB调试器的命令如下: gdb ./example 这会将GDB加载到你的程序中。你可以使用GDB提供的命令来设置断点、单步执行、查看变量值等等。 总的来说,安装Linux Mint系统并在其中编辑编译调试程序是一个简单的过程。你只需要按照指导进行安装,然后使用终端和相应的工具就可以轻松完成这些任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值