初步了解不同环境下c程序的编译机制

题目:编写一个主程序文件 main1.c 和一个子程序文件 sub1.c, 要求:子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b),此函数功能为对两个输入整型参数做某个运算,将结果做浮点数返回;主程序main1.c,定义并赋值两整型变量,然后调用函数 x2x,将x2x的返回结果printf出来。1) 请在ubuntu系统用gcc 命令行方式编译主程序main1.c 并运行; 2) 请在windows系统下用你熟悉的编译工具编译主程序main1.c 并运行。

目录

1.在不同的系统环境下运行main1.c主程序

1.1 在ubuntu20.04系统环境中编译运行main1.c
1.2 在windows系统中通过vs2022编译运行main1.c

2.使用makefile编译运行main1.c

3.总结

1.在不同的环境下运行main1.c主程序

1.1 在ubantu20.04系统环境中运行main1.c

首先在Ubuntu系统环境下,通过使用nano编辑器编写好子程序函数sub.c
在这里插入图片描述

主程序函数main1.c
在这里插入图片描述

头文件sub.h
在这里插入图片描述

接下来通过调用ubuntu系统中的gcc对程序进行编译并运行
首先我们需要学习一些有关gcc的语法知识
gcc编译大致需要四个编译阶段,分别是对程序进行预处理,编译,汇编,链接,接下来大致介绍一下这四个阶段的作用

1.预处理 (Preprocessing)
预处理阶段主要是处理源文件中的宏定义、头文件包含、条件编译等。例如,源文件中的 #include <stdio.h> 会在预处理阶段被替换为实际的头文件内容。预处理阶段生成的文件通常以 .i 结尾。

2.编译 (Compilation)
编译阶段主要是将预处理后的文件编译成汇编文件。GCC 首先将源代码文件(经过预处理)转换为一个或多个汇编语言文件,然后将这些汇编语言文件组合成一个单一的文件。编译阶段生成的文件通常以 .s 结尾。

3.汇编 (Assembly)
汇编阶段主要是将编译阶段生成的汇编文件转换为目标文件。目标文件是包含机器代码的二进制文件,但是它还不能直接运行,因为它可能有一些符号引用(例如函数调用)需要被解析。汇编阶段生成的文件通常以 .o 结尾。

4.链接 (Linking)
链接阶段主要是将汇编阶段生成的目标文件与所需的库链接起来,生成可执行文件。链接器解析符号引用,并且把所有的目标文件和库文件合并成一个单一的可执行文件。链接阶段生成的文件通常以可执行文件的形式存在,例如在 Unix 系统上是没有扩展名的,在 Windows 系统上是 .exe。

通常我们在使用gcc编译器对c语言程序进行编译时可以直接使用
gcc 源程序 -o 可执行文件

这条命令可以直接将我们的c语言源程序转换为可执行文件进行执行。

了解完了gcc编译器的具体运行过程之后,我们可以来对我们的main1.c程序进行编译并运行,由于main1.c中包含函数x2x是在sub.c中实现的,所以我们第一步需要通过gcc将sub.c进行预处理转化为目标文件

在这里插入图片描述

第二步,我们将main1.c文件编译并于sub.o文件进行链接生成可执行文件main1
在这里插入图片描述

第三步,执行可执行程序main1
在这里插入图片描述

1.2 在windows11系统中vs2022运行main1.c

首先编写程序main1.c
在这里插入图片描述

编写sub.h
在这里插入图片描述

编写sub.c
在这里插入图片描述

直接点击运行并查看结果
在这里插入图片描述

可以看到在window中VS2022编译器自动帮我们完成了对文件的预处理过程,而在使用gcc编译器时,我们无法同时编译两个c程序。

2.使用Makefile进行编译

Makefile的编写规则

target:prerequisites
	command			 #command以一个tab键开始

 #target为一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label)
 prerequisites是需要生成target所依赖的文件或是目标
#command也就是make需要执行的命令。(任意的Shell命令)

接下来我们在Ubuntu系统中通过nano编写makefile
在这里插入图片描述

保存文件在终端中使用make生产main1可执行文件并执行
在这里插入图片描述

3.总结

本次实验我在两种不同的系统和环境上使用不同的编译方式对main1.c等c程序进行了编译和运行,这次实验使我进一步了解了c语言程序转化为可执行文件的具体过程。

程序进行了编译和运行,这次实验使我进一步了解了c语言程序转化为可执行文件的具体过程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值