嵌入式系统开发01——Ubuntu系统下C语言程序开发流程

本文主要描述Ubuntu18.04系统下C语言程序的开发流程,具体包括Ubuntu系统安装、虚拟机网络参数的设置、Ubuntu的常用命令、vi/vim的使用、nano的使用、将系统自带的源更换为国内软件源、hello world的编译运行、C语言程序在不同系统环境下实现方式的对比、Makefile的使用

一、环境实验搭建

本文主要是利用Vmware软件实现Ubuntu系统下的C语言程序,需要用到VMware Workstation Pro以及Ubuntu 18.04镜像文件。

1、安装VMware workstation软件

通过安装包安装VMware workstation软件,安装完成后通过VMKeygen获得并输入许可证,在D盘创建以虚拟机命名的文件夹,在文件夹中建立共享文件夹。
修改虚拟机的默认位置
在软件中,修改虚拟机默认位置,点击编辑->首选项->工作区 ,将虚拟机的默认位置改为D:\虚拟机
修改共享虚拟机位置
修改共享虚拟机位置,点击共享虚拟机(已弃用)->更改设置,将共享虚拟机位置改为D:\虚拟机\共享
此时可能会一直显示正在检索共享虚拟机的位置…可能是因为计算机名中带有汉字引起的,此时需要修改重命名这台电脑,只需要点击设置->系统->系统信息->重命名这台电脑,将计算机名改为全英文并重启计算机,此时共享虚拟机就可以正常启用了

这样就基本上完成了Vmware软件的设置了。

2、安装Ubuntu server18.04

1、下载Ubuntu sever18.04镜像文件,在VMware workstation中,创建新的虚拟机
2、选择自定义,点击下一步
3、选择虚拟硬件兼容性workstation16x,点击下一步
4、选择Linux客户机操作系统,版本为Ubuntu64位,点击下一步
5、设置虚拟机名称为Ubuntu server18.04,存储在对应位置,点击下一步
6、设置处理器数量为1和每个处理器内核数量为4(处理器数量和内核数量相乘必须小于物理机的逻辑处理器数量,物理机的逻辑处理器可以在 任务管理器->性能 中查看),点击下一步
查看逻辑处理器的数量
7、分配内存1GB,点击下一步
8、选择虚拟机网络类型为NAT,点击下一步
9、选择I/O控制器类型,SCSI控制器选为LSL Logic (L),点击下一步
10、选择磁盘类型,虚拟磁盘类型选为SCSI(S),点击下一步
11、选择创建新的虚拟磁盘,点击下一步
12、 最大磁盘大小选择为20GB,选择将虚拟磁盘拆分成多个文件,点击下一步
13、确定磁盘文件名,点击下一步
14、选择自定义设置,选择新的磁盘镜像文件并添加,则创建完成。
自定义设置
15、接着打开虚拟机完成后续设置就可以了
注意:
1.在Install OpenSSH server处一定要勾选
2.在Ubuntu安装完成后,登录用户并输入
sudo su 命令并再次输入密码获取root权限,输入 apt update 命令更新软件列表和软件包
3.建议上诉设置完成后创建快照,便于在后续操作出现失误时回到该结点位置,依次点击
虚拟机->快照->拍摄快照 完成快照拍摄

二、设置网络参数

修改虚拟机网络
通过虚拟网络编辑器修改虚拟机网络,点击 更改设置 获得管理员权限,将 VMnet0 设置为 桥接模式 ,将 VMnet1 设置为 仅主机模式 ,将 VMnet8 设置为 NAT模式

三、Ubuntu常用命令

主要涉及到后续操作可能涉及的命令。

1、cp命令

功能
Linux cp(英文全拼:copy file)命令主要用于 复制文件或目录

命令参数详情
cp命令的语法:
cp [options] source dest或cp [options] source… directory

参数说明:

命令作用
-a此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合
-d复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式
-f覆盖已经存在的目标文件而不给出提示
-i与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答y时目标文件将被覆盖
-p除复制文件的内容外,还把修改时间和访问权限也复制到新文件中
-r若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件
-l不复制文件,只是生成链接文件

应用实例

cp命令

2、cd命令

功能
Linux cd(英文全拼:change directory)命令用于 切换当前工作目录

命令参数详情
cd命令的语法:cd [dirName]
dirName:要切换的目标目录。
其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的 home 目录 (也就是刚 login 时所在的目录)。
另外,~ 也表示为 home 目录 的意思, . 则是表示目前所在的目录, . . 则表示目前目录位置的上一层目录。

应用实例
跳到 /usr/bin/ : cd /usr/bin
跳到自己的 home 目录 : cd ~
跳到目前目录的上上两层 : cd . ./. .
cd命令

3、pwd命令

功能
Linux pwd(英文全拼:print work directory) 命令用于 显示工作目录
执行 pwd 指令可立刻得知您目前所在的工作目录的绝对路径名称。
命令参数详情
pwd命令的语法:pwd [参数]
参数说明:

命令作用
- -help在线帮助
- -version显示版本信息

应用实例
查看当前所在目录:pwd
pwd命令

4、exit命令

功能
Linux exit命令用于 退出目前的shell
执行exit可使shell以指定的状态值退出。若不设置状态值参数,则shell以预设值退出。状态值0代表执行成功,其他值代表执行失败。exit也可用在script,离开正在执行的script,回到shell。
命令参数详情
exit命令的语法:exit [状态值]
应用实例
退出用户:
exit命令
退出成功

5、ifconfig命令

功能
Linux ifconfig命令用于 显示或设置网络设备 。ifconfig可设置网络设备的状态,或是显示目前的设置。

命令参数详情
ifconfig命令的语法:
ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw<网络设备类型><硬件地址>][io_addr<I/O地址>][irq<IRQ地址>][media<网络媒介类型>][mem_start<内存地址>][metric<数目>][mtu<字节>][netmask<子网掩码>][tunnel<地址>][-broadcast<地址>][-pointopoint<地址>][IP地址]

参数说明:

参数解释
add<地址>设置网络设备IPv6的IP地址
del<地址>删除网络设备IPv6的IP地址
down关闭指定的网络设备
<hw<网络设备类型><硬件地址>设置网络设备的类型与硬件地址
io_addr<I/O地址>设置网络设备的I/O地址
irq<IRQ地址>设置网络设备的IRQ
media<网络媒介类型>设置网络设备的媒介类型
mem_start<内存地址>设置网络设备在主内存所占用的起始地址
metric<数目>指定在计算数据包的转送次数时,所要加上的数目
mtu<字节>设置网络设备的MTU
netmask<子网掩码>设置网络设备的子网掩码
tunnel<地址>建立IPv4与IPv6之间的隧道通信地址
up启动指定的网络设备
-broadcast<地址>将要送往指定地址的数据包当成广播数据包来处理
-pointopoint<地址>与指定地址的网络设备建立直接连线,此模式具有保密功能
-promisc关闭或启动指定网络设备的promiscuous模式
[IP地址]指定网络设备的IP地址
[网络设备]指定网络设备的名称

应用实例
启动或关闭指定网卡:
ifconfig eth0 down
ifconfig eth0 up
为网卡配置和删除IPv6地址
ifconfig eth0 add 33ffe:3240:800:1005::2/ 64 //为网卡设置IPv6地址
ifconfig eth0 del 33ffe:3240:800:1005::2/ 64 //为网卡删除IPv6地址

6、ping命令

功能
Linux ping 命令用于 检测主机
执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
命令参数详情
ping命令的语法:
ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]

参数说明:

参数作用
-d使用Socket的SO_DEBUG功能
-c <完成次数>设置完成要求回应的次数
-f极限检测
-i<间隔秒数>指定收发信息的间隔时间
-I<网络界面>使用指定的网络接口送出数据包
-l<前置载入>设置在送出要求信息之前,先行发出的数据包
-n只输出数值
-p<范本样式>设置填满数据包的范本样式
-q不显示指令执行过程,开头和结尾的相关信息除外
-r忽略普通的Routing Table,直接将数据包送到远端主机上
-R记录路由过程
-s<数据包大小>设置数据包的大小
-t<存活数值>设置存活数值TTL的大小
-v详细显示指令的执行过程
-w deadline在 deadline 秒后退出
-W timeout在等待 timeout 秒后开始执行

应用实例
ping命令

7、sudo命令

功能
Linux sudo命令 以系统管理者的身份执行指令 ,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。

命令参数详情
sudo命令的语法:
sudo -V
sudo -h
sudo -l
sudo -v
sudo -k
sudo -s
sudo -H
sudo [ -b ] [ -p prompt ] [ -u username/#uid] -s
sudo command

参数说明:

命令作用
-V显示版本编号
-h会显示版本编号及指令的使用方式说明
-l显示出自己(执行 sudo 的使用者)的权限
-v因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码
-k将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
-b将要执行的指令放在背景执行
-p prompt可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
-u username/#uid不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
-s执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
-H将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )
command要以系统管理者身份(或以 -u 更改为其他人)执行的指令

应用实例
显示出自己的权限:
sudo命令

8、 passwd命令

功能
Linux passwd命令用来更改使用者的密码

命令参数详情
passwd命令的语法:passwd [-k] [-l] [-u [-f]] [-d] [-S] [username]

必要参数:

参数作用
-d删除密码
-f强迫用户下次登录时必须修改口令
-w口令要到期提前警告的天数
-k更新只能发送在过期之后
-l停止账号使用
-S显示密码信息
-u启用已被停止的账户
-x指定口令最长存活期
-g修改群组密码
-i口令过期后多少天停用账户

选择参数:

参数作用
- -help显示帮助信息
- -version显示版本信息

应用实例
修改用户密码:
修改密码
显示账号密码信息:
显示账号密码信息

四、vi/vim的使用

1、vi/vim概述

vi(visual editor)编辑器通常被简称为vi,它是Linux和Unix系统上最基本的文本编辑器,类似于Windows 系统下的notepad(记事本)编辑器。
vim是一个由vi增强版的编辑工具,是一个开源免费的软件,它功能丰富,使用快捷,应用广泛。vim也是大多数linux系统上的默认编辑器,用于对文本文件进行建立,显示,编辑,删除,复制等操作,需要用命令进行控制。
vim工作模式可分为三种,即——命令模式,编辑模式,末行模式
1. 命令模式:可以用vim加上任意一个已经存在或是想创建的文件名,如果系统还不存在该文件,就意味着创建文件,如果系统存在该文件,就意味着编辑该文件。此时就可以进入vim的默认模式—命令模式。此时vim等待输入正确的命令,键入的每一个字符都会当作命令来处理。
2. 插入模式:在进入命令模式之后,按下 a i o等键可进入插入模式。进入插入模式后可以对文件进行编辑,左下角出现INSERT
3. 末行模式:在进入末行模式前先按下【Esc】确认处于命令模式后,按下冒号【:】,即可进入末行模式

2、常用操作:

1、进入Vim:
在系统光标提示符后,输入vim及文件名后,回车,进入Vim编辑画面

  vim 1.c 

vim 1.c
注意:进入vim之后,是处于命令行模式,要切换到插入模式,才能够输入文字
2、切换至插入模式编辑文件:
在命令行模式下按一下字母「i」就可以进入插入模式,这时候就可以开始输入了
i
3、插入模式切换到命令行模式:
在插入模式下,按一下「ESC」键即可
命令行模式
4、退出vim及保存文件:
在命令行模式下,按冒号「:」键,进入底行模式
退出vim
常见底行模式下的命令行:

命令作用
:w filename文件以filename为文件名保存
:wq文件存盘并退出vim
:q文件不存盘并退出vim
:q!文件不存盘强制退出vim

5、命令行模式下的功能键
(1)从命令行模式切换为插入模式的三种方式:

项目Value
「 i 」从当前光标位置进入插入模式
「a 」从当前光标位置的下一个字符进入插入模式
「o 」从当前光标位置的下一行进入插入模式

(2)移动光标:
小写英文字母「h」「j」「k」「l」,分别控制光标左、下、上、右移一格
(3)行尾追加:
不管光标在该行的什么位置,直接按大写字母「A」即可
(4)从当前光标处删除到行末:把光标停留在需要删除的句子前面,依次按下「d」「$」即可
(5)快速跳转到行首:
按下数字「0」,即可
(6)撤销更改:
按小写字母「u」,撤销上一步的更改操作
按大写字母「U」,撤销整行的更改操作
「Ctrl+R」撤销上一步「撤销操作」

五、nano的使用

1、nano概述

nano是一个字符终端的文本编辑器,有点像DOS下的editor程序。它比vi/vim要简单得多,比较适合Linux初学者使用。某些Linux发行版的默认编辑器就是nano。
nano命令可以打开指定文件进行编辑,默认情况下它会自动断行,即在一行中输入过长的内容时自动拆分成几行,但用这种方式来处理某些文件可能会带来问题,比如Linux系统的配置文件,自动断行就会使本来只能写在一行上的内容折断成多行了,有可能造成系统不灵了。因此,如果你想避免这种情况出现,就加上-w选项吧。

2、语法格式:

Nano [选项] [[+行,列]文件名]…
光标控制:
移动光标:使用用方向键移动
选择文字:按住鼠标左键拖到

复制、剪贴和粘贴:
复制一整行:Alt+6
剪贴一整行:Ctrl+K
粘贴:Ctrl+U
如果需要复制/剪贴多行或者一行中的一部分,先将光标移动到需要复制/剪贴的文本的开头,按Ctrl+6(或者Alt+A)做标记,然后移动光标到 待复制/剪贴的文本末尾。这时选定的文本会反白,用Alt+6来复制,Ctrl+K来剪贴。若在选择文本过程中要取消,只需要再按一次Ctrl+6。
搜索:
按Ctrl+W,然后输入你要搜索的关键字,回车确定。这将会定位到第一个匹配的文本,接着可以用Alt+W来定位到下一个匹配的文本。

翻页:
Ctrl+Y到上一页
Ctrl+V到下一页

保存:
使用Ctrl+O来保存所做的修改

退出:
按Ctrl+X
如果你修改了文件,下面会询问你是否需要保存修改。输入Y确认保存,输入N不保存,按Ctrl+C取消返回。如果输入了Y,下一步会让你输入想要保存的文件名。如果不需要修改文件名直接回车就行;若想要保存成别的名字(也就是另存为)则输入新名称然后确定。这个时候也可用Ctrl+C来取消返回。

六、将系统自带的源更换为国内软件源

ubuntu自带的软件源服务器在国外,国内访问卡,更换成阿里云源提高apt 安装速度。

1、查看ubuntu的Codename

lsb_release -a

Codename

2、备份系统源

cd /etc/apt
sudo cp sources.list sources.list.bak

输入密码获得管理员权限,备份系统源
备份系统源

3、写入阿里云的源

nano sources.list

sources.list
长按 Ctrl+K 将sources.list里面的文字全部删除。

下面源信息中$Codename为第一步中系统的Codename,用记事本批量替换即可。

deb http://mirrors.aliyun.com/ubuntu/ $Codename main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ $Codename-backports main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ $Codename-proposed main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ $Codename-security main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ $Codename-updates main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ $Codename main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ $Codename-backports main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ $Codename-proposed main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ $Codename-security main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ $Codename-updates main multiverse restricted universe

复制上面的文本,用记事本打开,点击编辑->替换,在搜索栏输入$Codename,下方输入开始查询到的Codename,如18.04就是bionic,点击全部替换,并将记事本中替换后的文本复制到剪切板。
替换codename
替换成功
在VMware里面依次点击编辑->粘贴,文本会自动输入到sources.list中
粘贴
点击Ctrl+x,输入y确认退出,然后点击一次回车,就成功将阿里源写入了sources.list

4、执行更新

apt-get update

在命令行输入 apt-get update ,完成软件更新
更新软件

七、gcc的使用

1、gcc概述

GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。后来又扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection)。

2、gcc的基本用法

GCC最基本的用法是∶

gcc [options] [filenames]

其中options就是编译器所需要的参数,filenames给出相关的文件名称。在使用GCC编译器的时候,我们必须给出一系列必要的调用参数和文件名称。

参数作用注意
-c只编译,不链接成为可执行文件
-o output_filename确定输出文件的名称为output_filename这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out
-g产生符号调试工具(GNU的gdb)所必要的符号资讯想对源代码进行调试,必须加入这个选项
-O对程序进行优化编译、链接编译、链接的速度相应地要慢一些
-O2比-O更好的优化编译、链接整个编译、链接过程会更慢。
-I dirname将dirname所指出的目录加入到程序头文件目录列表中在预编译过程中使用的参数
-vgcc执行时执行的详细过程,gcc及其相关程序的版本号
文件名解释
.cC语言源代码文件
.a由目标文件构成的档案库文件
.CC++源代码文件且必须要经过预处理
.h程序所包含的头文件
.iC源代码文件且不应该对其执行预处理
.iiC++源代码文件且不应该对其执行预处理
.mObjective-C源代码文件
.mmObjective-C++源代码文件
.o编译后的目标文件
.s汇编语言源代码文件
.S经过预编译的汇编语言源代码文件

注意:当[options]缺省时,gcc会将文件经预处理、汇编、编译并链接形成可执行文件。

3、gcc的执行过程

使用gcc由C语言源代码文件生成可执行文件需要经历预处理、编译、汇编和连接
命令gcc首先调用cpp进行 预处理 ,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。接着进行编译,根据输入文件生成以.o为后缀的目标文件。汇编过程是针对汇编语言的步骤,.S 为后缀的汇编语言源代码文件和汇编 .s 为后缀的汇编语言文件经过预编译和汇编之后都生成以 .o 为后缀的目标文件。当所有的目标文件都生成之后,gcc将所有的目标文件安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方。

4、下载gcc

当在命令行输入gcc时,如果显示如下信息:
未安装gcc
则表示未安装gcc,只需要根据提示在命令行输入sudo apt install gcc,gcc就会在输入密码后找到gcc的安装包并提示安装信息,确认继续后就会自动安装到虚拟机上。此时输入gcc则会提醒no input files
安装完成

八、hello world的编译运行

1、编写源代码文件hello.c

在命令行输入 vim hello.c 创建源代码文件,点击 [i] 进入插入模式,在 hello.c 文件中输入源代码,代码编辑完成后输入 [Esc] 进入命令模式,此时我们需要输入:wq 保存代码并回到命令行。
hello.c

2、生成可执行文件

步骤命令
预编译阶段gcc -E hello.c -o hello.i
编译阶段gcc -S hello.i -o hello.s
汇编阶段gcc -c hello.s -o hello.o
链接阶段gcc hello.o -o hello

经过上述操作后便生成执行可执行文件 hello.c
在这里插入图片描述

3、运行可执行文件

在命令行输入 ./hello 即可实现输出 Hello world!
hello world
至此,就实现了 在Ubuntu系统下用C语言编写一个简单的输出 hello word 的程序,并编译有、运行之 的任务

九、不同系统环境下实现C语言程序的对比

1、要求

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

2、在ubuntu系统用gcc 命令行方式实现

编写sub1.c

x2x实现两个数相加

#include <stdio.h>
float x2x(int a, int b)
{
  return a+b;
}

编写main1.c

#include <stdio.h>
int main()
{
  int a=10,b=8;
  float num=0;
  num=x2x(a,b);
  printf("%f\n",num);
  return 0;
}

编译

gcc main1.c sub1.c -o main1

运行

./main1

Ubuntu实现

3、在windows系统下用Visual studio 2019实现

编写sub1.c

#include <stdio.h>
using namespace std;
float x2x(int a, int b)
{
	return a + b;
}

编写main1.c

#include <stdio.h>
#include "sub1.h"
using namespace std;
int main()
{
	int a = 10, b = 8;
	float num = 0;
	num = x2x(a, b);
	printf("%f\n", num);
	return 0;
}

编写sub1.h

#pragma once
#ifndef _SUB1_H_
#define _SUB1_H_
float x2x(int a, int b);
#endif

调试

调试成功

总结

在Ubuntu系统上通过 gcc命令 实现 main1.c 文件对 sub1.c 文件的调用只需要通过 gcc main1.c sub1.c -o main1 即可实现,而在Windows上通过 Visual Studio 来实现则需要另外编写 sub1.h来解决。在我看来,在Ubuntu系统上通过 gcc命令 实现一个.c文件对另一个.c文件的调用要比在Windows上通过 Visual Studio 上容易。

十、Makefile的使用

Makefile简介

makefile 文件中定义了一系列的规则来指定, 哪些文件需要先编译, 哪些文件需要后编译, 哪些文件需要重新编译, 甚至于进行更复杂的功能操作。makefile 需要配合 make 指令进行自动化编译。make 是一个命令工具,用来解释 makefile 文件中的代码,从而实现自动化编译。

安装Make

输入命令sudo apt-get install make即可完成安装
安装make

makefile规则

target ... : prerequisites ...
command
...
...
目标:依赖
执行指令 ...

target是一个目标文件(所要生成的文件)
prerequisites就是,要生成那个target所需要的文件或是目标。
command也就是make需要执行的命令。(任意的Shell命令)
这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。
command一定要以Tab键开始,否则编译器无法识别command

编写makefile

输入vim makefile,编辑makefile,编写完成后输入 [Esc]->:wq->Enter 保存并退出vim

main1: main1.o sub1.o
	gcc -o main1 main1.o sub1.o
main1.o: main1.c sub1.c
	gcc -c main1.c -o  main1.o
sub1.o: sub1.c
	gcc -c sub1.c -o  sub1.o

makefile

编译并运行

命令行输入 make 进行编译,生成可执行文件main1,命令行输入./main1运行可执行main1
编译运行

总结

通过本次作业,我不仅复习了一些掌握了Linux的知识,还学习到不少新的知识。同时,在本次完成作业的过程中,我还认识到了自己Linux学习的不足与短板,希望在接下来的嵌入式系统的学习中,通过听讲和查询资料来不断完善自己的知识体系。


参考列表:
1.https://blog.csdn.net/qq_46467126/article/details/120279485?spm=1001.2014.3001.5502
2.markdown教程
3.Linux Vim编辑器的基本使用
4.Ubuntu 快速更换阿里源
5.gcc简介
6.gcc详解
7.Linux下gcc编译器的安装与使用
8.Makefile的介绍与工作原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

6¿6

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

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

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

打赏作者

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

抵扣说明:

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

余额充值