【嵌入式基础】LINUX系统安装及基础C语言程序编译

发布于:2022-12-25 ⋅ 阅读:(358) ⋅ 点赞:(0)

目录

一.环境设置

二.在Ubuntu上编写一个简单的hello world程序

1.安装vim文本编辑器和gcc编译器

2.新建hello.c 编辑后保存

3.编译允许hello.c

三.进阶练习—通过子程序对两个输入的整型变量进行运算(对比Linux与Ubuntu)

1.代码段

2.Linux操作系统环境下编译操作及结果

3.Windows环境下

四.Linux系统中Makefile文件编写

1.Makefile的基本使用规则

2.运用makefile编译链接上文代码程序并执行

​编辑 

 五.结论


一.环境设置

VMware虚拟机软件安装

Ubuntu 18.04 虚拟机配置

二.在Ubuntu上编写一个简单的hello world程序

1.安装vim文本编辑器和gcc编译器

sudo apt-get vim

sudo apt-get gcc

2.新建hello.c 编辑后保存

输入touch hello.c 创建hello.c源文件,此时键入ls -l即可查看文件列表

输入vim/vi hello.c 进入文本编辑器,键入i进入insert输入模式即可编写代码

#include<stdio.h>
int main()
{
    printf("hello world!/n");
    return 0;
}

 代码编写完成后,键入Esc后按住Ctrl+" : "进入到命令模式,然后输入wq!即可保存代码并退出。

3.编译允许hello.c

在终端中用gcc编译软件进行编译,输入gcc -o hello hello.c(-o后面就是编译后的名字) 

 此时通过 ls -l 即可看到文件列表多了一个hello的可执行文件

输入./hello 便可执行经典的helloworld程序啦(操作及结果ru'xi)

通过以上的经典hello.c的练习,我们也算是基本熟悉了Linux的命令行系统环境以及清楚了如何在linux环境下编写执行一个c语言程序的基本流程

三.进阶练习—通过子程序对两个输入的整型变量进行运算(对比Linux与Ubuntu)

1.代码段

·主程序

#include <stdio.h>
#include <stdlib.h>
#include "sub1.h"            //main函数源文件

int main()
{
	int num1,num2;
	float output;
	printf("Please input two numbers:\n");
	scanf("%d,%d",&num1,&num2);
	output = add(num1,num2);
	printf("The calculation results: %.2f\n",output);
    system("pause");      //起到暂停作用,为了方便在vscode编译窗口看到结果
	return 0;
}

·子程序

#ifndef _SUB1_H_        //子程序头文件
#define _SUB1_H_

float add(int x,int y);

#endif
#include <stdio.h>            //子程序源文件
#include "sub1.h"

float add(int x,int y)
{
	float sum;
	sum = x + y;
	return sum;
}

2.Linux操作系统环境下编译操作及结果

·编辑编译工具:vim、gcc

· 补充GCC的用法

通过gcc的"-o"命令选项来指定自己的可执行程序的名称

eg:gcc -o name name.c       即可生成可执行文件name

通过gcc的"-c"标记来编译支持库代码(对多个文件进行编译)

eg:gcc -c name.c 输出一名为name.o的文件

 · Step1

通过vim创建main.c和sub1.c两个源文件,并创建sub1.h的头文件(代码为上文代码段中代码)

 · Step2

首先通过gcc -c sub1.c和gcc -c main.c将他们转变为sub1.o和main.o(他们包含能够被Linux执行的目标代码),然后通过gcc -o Finalmain main.o sub1.o来执行连接阶段的工作,最终生成一个可执行文件Finalmain

  · Step3

最后通过 ./Finalmain 执行编译好的文件,执行结果如下

3.Windows环境下

· 编译器工具:visual studio code

· 与Linux上面代码段不同的是,我在main.c里面包含了sub1的头文件和源文件两个,因为一开始只包含sub1头文件时编译报错,可能因为在编译main.c的时候没有同时编译sub1.c,导致在main里面调用sub1里面的函数时存在问题,于是我将sub1.c直接包含在了main.里面便可成功执行了

编译结果如下:

 

四.Linux系统中Makefile文件编写

1.Makefile的基本使用规则

在使用makefile之前,我们先来看一下makefile的基本规则如下:

target : prerequisites

        command

target 是一个目标文件,也可以是.o gcc编译后的文件,还可以是一个标签

prerequisites 就是要生成的target所需要的文件或是目标

command 也就是 make 需要执行的命令(任意的 Shell 命令)

它们之间就是一个文件依赖的关系,即target这一个或多个的目标文件依赖于prerequisites中的文件,若prerequisites中的文件比target中的文件更新的话,那么就会执行command命令,这就是makefile的规则,也是makefile的核心。

2.运用makefile编译链接上文代码程序并执行

通过vim makefile 创建makefile文件,其中代码段如下:

代码编译允许结果如下:

 

 五.结论

通过对比Windows环境下的编译器编译代码和Linux环境下的gcc及makefile编译代码过程,更加清楚我们编写的源码首先是通过编译器生成中间代码文件(.obj/.o),然后再将大量obj链接起来生成的可执行行文件,这些工作再WIndows环境下都是编译器直接帮我们做好滴,现在才大致体会到了这个过程,不得不说Linux环境下makefile还真挺用的。


网站公告

今日签到

点亮在社区的每一天
去签到