【嵌入式基础01】Ubuntu系统下编译C程序详细流程


本文主要叙述Ubuntu18.04系统下编译C程序的详细流程,包括最基础的网络参数设置、apt源的更换、经典hello world在Ubuntu下的编译方式,vim文本编辑器的利用,makefile的使用等

一.环境设置

虚拟机软件 Vmware
Ubuntu 18.04

二.网络参数设置

Ubuntu的网络配置有两种方式,一种是通过interfaces来设置,一种是通过NetworkManager来配置1,这里主要讲解NetworkManager配置方式。

通过NetworkManager配置网络

NetworkManager是Ubuntu中图形化的网络管理工具。
网络命令管理行工具NetworkManager command line tool,也叫nmcli

1. 设置虚拟机的网络适配器为NAT模式(桥接模式)2

在这里插入图片描述
选择 虚拟机->设置->网络适配器->桥接模式
在这里插入图片描述

2. 虚拟网络编辑器设置

选择 编辑->虚拟网络编辑器3
在这里插入图片描述
在这里插入图片描述
点击更改设置
在这里插入图片描述

选择添加网络,添加Vment0,并设置为桥接模式,并设置为自动即可。

3. 网卡与DNS配置

在命令窗口输入ifconfig -a查看自己的网卡编号
可以注意图中ens33段落第二行(不是lo的那一段,与ens33名字可能有所不同)
在这里插入图片描述
输入命令sudo vi /etc/network/interfaces,编辑该文件。
注意此处ens33处用自己的网卡编号替换,address和gateway都需要根据自己在上图中所查询到的编号来填写
填写情况如下图所示
在这里插入图片描述
编辑完成后按esc再输入:wq!,即可保存退出。(可以查询vi/vim关于保存与退出的命令)
在命令行输入 ping 自己的IP地址 ,可以看是否可以ping通,在网络畅通的情况下,会一直返回数据条,停止输出则用crtl+c;
再尝试ping www.baidu.com,如果成功即属于配置成功,失败的话,可以查看我在上面举出的那篇博客。

三. 更换apt源为阿里源

Ubuntu系统一般采用 apt-get 命令进行某个软件的在线查找和安装,默认官方的软件源仓库位于国外,下载速度较慢。在这里笔者选择了阿里源,以提高软件安装速度4

1. 查看版本信息

使用如下命令
lsb_release -c
得到本系统的系统代号bionic。
注:Ubuntu 12.04 代号为precise;
Ubuntu 14.04 代号为trusty;
Ubuntu 15.04 代号为vivid;
Ubuntu 15.10 代号为wily;
Ubuntu 16.04 代号为xenial。

扫描二维码关注公众号,回复: 13285799 查看本文章

2. 编辑源列表文件

命令如下:
sudo vim /etc/apt/sources.list

3. 修改文件信息

将原有内容更改为以下内容。

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse 
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse 
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse 
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse 
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse 
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse

4. 更新软件列表及软件包

运行如下命令
sudo apt-get update
出现加载进度条
sudo apt-get upgrade
出现加载进度条
等待完成即可

四.编写一个简单的输出hello world的C程序

1.安装vim,gcc

输入命令
sudo apt-get install vim
安装vim编辑器
sudo apt-get install gcc
安装gcc编译器

2.vi/vim介绍

目前使用较多的是vim编辑器,vim具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性,方便程序设计。
vi是老式的字处理器。vim是vi发展出来的一个文本编辑器,代码补完、编译及错误跳转等方便编程的功能丰富。

vim使用

vim使用共分为三种模式,分别是命令模式输入模式底线命令模式
启动vim,进入命令模式,此时敲击键盘会被vim识别为命令,而非输入字符。如此时按下i,并不会输入字符,而是被当作切换到输入模式的命令。

几个常用命令:
i 切换到输入模式,以输入字符
x 删除当前光标所处字符
: 切换到底线命令模式,在最底一行输入命令
ESC 退出输入模式,切换到命令模式

底线命令模式中,基本的命令有:
q 退出程序
w 保存文件
在之后的部分我们会用到:wq命令
惊叹号在vim中常常具有强制的意思
:wq指储存后离开
如果为:wq! 则为强制存储后离开(常用)

3.新建hello.c

输入命令vim hello.c
进入vim编辑器,键入i,进入insert模式,编写代码

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

编辑完成后,esc键,:wq! 退出vim编辑

4.编译hello.c

输入命令
gcc hello.c -o hello
此时会生成一个hello文件
输入./hello
即完成hello world经典操作
在这里插入图片描述

五.输入两个整型参数进行运算(Linux与Windows比较)

1.要求

编写一个主程序文件 main1.c 和一个子程序文件 sub1.c, 要求:子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b),此函数功能为对两个输入整型参数做某个运算,将结果做浮点数返回;主程序main1.c,定义并赋值两整型变量,然后调用函数 x2x,将x2x的返回结果printf出来。

2.编写C语言代码(Linux)

同样,利用vim编辑器编写C语言代码,命令不再赘述。
main1.c

#include<stdio.h>
extern float x2x(int x,int y)
int main()
{
    
    
    int x,y;
    x=1;
    y=1;
    float r;
    r=x2x(x,y);
    printf("%f",r);
    return 0;
}

sub1.c

float x2x(int x,int y)
{
    
    
	float r;
	r=x+y;
	return r;
}

之后输入命令运行
gcc -o main main.c sub1.c
./main1

3.编写C语言代码(Windows)

这里,笔者利用DEV C++进行编译
建立工程文件 first
编写main.c文件

#include <stdio.h>
#include "sub1.h"
int main() 
{
    
    
	int x,y;
	x=1;y=1;
	float r;
	r=x2x(x,y);
	printf("%f",r);
	return 0;
}

编写sub1.h头文件

#include <stdio.h>
float x2x(int x,int y)
{
    
    
	float r;
	r=x+y;
	return r;
}

疑问

在这一步稍微存在一些疑问,最开始笔者建立了main.c,sub1.c,sub1.h,三个文件,但一直报错,怀疑因为主函数中没有调用到sub1.c文件,或是sub1.c文件没有编译,因此没有办法将三个文件进行整体运行。
因此采用了main.c和sub1.h结合的方法,将sub1.c中的代码放入了sub1.h中。

六.用makefile编译上述程序

1.makefile介绍5

在Shell脚本中使用make命令来进行编译,尤其在C/C++开发中,make命令通过makefile文件中描述源程序之间的依赖关系进行自动编译;
makefile文件是按照规定格式编写,需说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系;
很多大型项目的编译都是通过 Makefile 来组织的。

2.make如何工作

1.make在当前目录下寻找makefile或Makefile文件
2.若找到,查找文件中第一个目标文件.o
3.若目标文件不存在,根据依赖关系查找.s文件
4.若.s文件不存在,根据依赖关系查找.i文件
5.若.i文件不存在,根据依赖关系查找.c文件,此时.c文件一定存在,于是生成一个.c文件之后再去执行。

makefile文件规则

<target>: <prerequisites> // <目标>: <前置条件>
[Tab]<commands> // 第二行必须tab键开始,空格会报错,后面是命令

目标不可省略,前置条件和命令可以二选一

目标可以是文件名,指明make命令所要构建的对象,也可以是某个操作名称。

clean:
			rm *.o
		执行make clean命令,实现对象文件的删除

3.安装make

输入命令
sudo apt-get install make

4.用vim编辑makefile

在vim文本中
在这里插入图片描述保存并退出后,在命令行输入make即可实现。


  1. https://blog.csdn.net/mch2869253130/article/details/100774508 ↩︎

  2. https://blog.csdn.net/qq_22310551/article/details/85380756 ↩︎

  3. https://blog.csdn.net/weixin_42108484/article/details/82698877 ↩︎

  4. https://blog.csdn.net/zhangjiahao14/article/details/80554616 ↩︎

  5. https://blog.csdn.net/qq_35451572/article/details/81092902 ↩︎

猜你喜欢

转载自blog.csdn.net/qq_46467126/article/details/120279485