嵌入式Linux_C语言开发工具

C语言开发工具

开发工具和操作系统之间是相互促进的、相互发展的,操作系统离不开软件开发的支持,软件开发工具也离不开操作系统这个平台。Linux操作系统下Linux开发工具的开源方式,可以让大家拥有更多的资源,得到更多的信息,对软件工具的发展起到了更大的促进作用。

1、嵌入式Linux C语言开发概述

C语言的特点:

  • C语言具有出色的可移植性,能够在不同体系结构的软硬件平台上运行。
  • C语言具有简洁紧凑,使用灵活的语法机制,并能直接访问硬件。
  • C语言具有很高的运行效率。
    所以,很多操作系统的内核,系统软件等都是使用C语言编写的。在嵌入式Linux开发领域,C语言同样是使用最广泛的语言之一。

2、嵌入式Linux C开发环境

编辑工具:在Linux下编程,你不再拥有集成化环境,你可以使用类似于EDIT的工具——经典vi编辑器来编辑源文件。当然还有很多其他的更高档一点的。总之,编辑器和编译器是分开工作的。
编译工具:在Linux下支持大量的语言,有C、C++、Java等。在使用这些编译工具时,是使用命令方式的,也就是说,先用编辑工具输入源程序,然后执行一长串的命令进行编译。例如“gcc -o hello hello.c”。
调试工具:GDB是GNU开源组织发布的一个强大的Unix下调试程序工具。或许大家还是喜欢图形界面的,比如很多IDE的调试。但是在UNIX平台下,各有所长。
软件工具:一个大型软件总是由很多个源程序组成,为了能够将大量的编译命令做一次完成,Linux下提供了make各autoconf的工具分别用于大型软件的编译,以及编译前根据机器当前状态做相应的配置。
开发工具包:在Linux下提供了很多优秀的GNU C库函数,Motif函数库,GTK函数库、QT函数库等工具包。
项目管理工具:在Linux下还有CVS这样优秀的用于版本控制、管理的软件配置工具。

3、嵌入式文本编辑器

Linux上最常用的文本编辑器就是vi,Linux下一切都是文件,用户在使用计算机的时候,往往需要创建自己的文件,这些工作都离不开编辑器。
vi是Visual Interface的简称,它可以执行输出、删除、查找、替换、块操作等众多文本操作。
大家需要注意:在vi中没有排版,不能和word中一样,对字体字号格式段落进行配置,它只是一个文本编辑器,vi没有菜单,并且不支持鼠标操作,vi的创造者为了将程序员的双手全部放在键盘上,所以开发了很多命令。vi有三种基本工作模式:命令行模式、插入模式、底行模式。
当然,vi还有更高级的有vim,即改良版的vi,Vim是从vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。
在这里插入图片描述
(1)基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:
命令模式:
用户刚刚启动 vi/vim,便进入了命令模式。控制屏幕光标的移动,字符、行或者字的删除,移动复制某区段以及进入其他模式。此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。需要注意的是,这时候移动上下左右,计算机会哔哩哔哩叫。

以下是常用的几个命令:
i 切换到输入模式,以输入字符。
x 删除当前光标所在处的字符。
nx删除光标后面的n个字符
xX删除光标前面的n个字符
dd剪切一行
yy复制一行
nyy,ndd分别是复制n行、剪切n行,并且在屏幕下方会提示复制了多少行。
p粘贴
u撤销
ctrl+r取消撤销
G去文章的最后面
gg去文章的最前面
$去光标所在行的行尾
0或者^去光标所在行的行首
w下一个字
b上一个字
ctrl+b屏幕往后翻页
ctrl+f屏幕往前翻页
ctrl+u屏幕往后翻半页
ctrl+d屏幕往前翻半页
ctrl+g列出光标所在行的行号
需要注意的一点,这里的yy和dd是将vim里面的内容复制到缓冲区,并且系统的剪切板,只有右击复制才能复制到剪切板中,系统的剪切板不等于缓冲区,你这时候右击粘贴是不能粘贴yy过的内容。

: 切换到底线命令模式,以在最底一行输入命令。
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

输入模式
在命令模式下按下i就进入了输入模式。在输入模式中,可以使用以下按键:
字符按键以及Shift组合,输入字符
ENTER,回车键,换行
BACK SPACE,退格键,删除光标前一个字符
DEL,删除键,删除光标后一个字符
方向键,在文本中移动光标
HOME/END,移动光标到行首/行尾
Page Up/Page Down,上/下翻页
Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
ESC,退出输入模式,切换到命令模式
底线命令模式:
在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
q 退出程序
w 保存文件
x保存退出
wq保存退出
q!强制退出(不保存)
set nu 列出行号
/关键字 查找按住n后翻,N前翻,查到一个没有的关键字则可以取消高亮
按ESC键可随时退出底线命令模式。

当然了,这些命令用多了就习惯了,一时忘记了可以去百度查看,经常用到的也就那几个。

4、嵌入式编译器

1、gcc编译器
在Linux平台上,最流行的就是gcc编译器。
gcc可以为x86,ARM、MIPS等不同体系结构的硬件平台编译程序。
gcc可以编译C、C++、Java、Pascal等数十种高级语言。
gcc的编译效率要比其他编译器高出不少,所以使用的基本上都是gcc编译系统。

2、gcc命令常用选项和工作流程
gcc的使用格式:
gcc [选项] [文件名] [选项] [文件名]
(1)总体选项:用于控制编译的整个流程
-c: 对源文件进行编译或者汇编
-E: 对源文件进行预处理
-S: 对源文件进行编译
-o: 输出目标文件
-v: 显示编译阶段的命令
(2)语言选项:用于支持各种版本的C语言程序
-ansi: 支持符合ANSI标准的C程序
(3)警告选项:用于控制编译过程中产生的各种警告信息
-W:屏蔽所有的警告信息
-Wall:显示所有的警告信息
-Werror: 出现任何警告就停止编译
(4)调试选项:用于控制调试信息
-g: 产生调试信息
(5)连接器选项:用于控制链接过程
-static: 使用静态链接
-l library:链接library函数库文件
-L dir:指定连接器的搜索目录dir
-shared: 生成共享文件

在使用GCC编译程序时,编译过程可以被细分为四个阶段:

  • 预处理:处理所有以#开头的代码,头文件(展开)、宏定义(替换)、条件编译(打开或者关闭)
    gcc -E hello.c -o gello.i

  • 编译:把C代码转换成汇编代码,同时要进行语法检查,生成汇编代码
    gcc -S hello.i -o hello.s

  • 汇编:把汇编代码转换成二进制代码
    gcc -c hello.s -o hello.o

  • 链接:链接代码需要用到的库文件以及其他文件

  • gcc hello.o -o hello

例如:

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

1、预处理阶段:
由于在test.c中使用了头文件stdio.h,所以gcc在编译的时候首先要把头文件stdio.h中的内容加载到test.c中的首部。
输入命令:gcc -E test.c -o test.i在这里插入图片描述
这时,我们查看一下test.i
在这里插入图片描述
在这里插入图片描述
test.i文件中的代码有很多行,但是stdio.h不见了,被替换掉了。
2、编译阶段
编译阶段是整个编译过程中最复杂的一个阶段,同时要进行语法检查,如果有语法错误,这一步会报错。
gcc -S test.i -o test.s
会生成汇编代码
在这里插入图片描述
3、汇编阶段
汇编阶段就是将汇编语言翻译成二进制文件,即目标文件。
gcc -c test.s -o test.o
在这里插入图片描述
4、链接阶段
目标文件虽然已经被CPU识别,但是单个目标文件一般是无法运行的。原因在于一个程序往往是由多个源文件组成的,每一个源文件只对应一个目标文件。链接阶段的任务就是把程序中的所有的目标文件和所需的库文件都链接在一起,最终生成一个可执行文件。
gcc test.o -o test.out
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值