嵌入式课堂整理3

一、嵌入式Linux开发工具
1.vim gcc gdb make
(1) vim(文本编辑器):学会使用和如何配置vim
(2) gcc(编译器):学会制作动态库和静态库及使用与区别
(3) make(工程管理器):编写makefile文件
(4) gdb(调试器):设置断点、单步执行、调试内存错误
二、Linux文本编辑器: vim-功能最强大的文本超级器一摆脱鼠标;
1.i–vim-gvim :命令行模式{nyy(复制n行代码)、p(粘贴)、ndd(删除n行代码)、u}、插入模式 (i, a)、底行模式(先按esc然后shift加上: )、保存退出(wq)
2.如何配置vim
/etc/vim/vimrc组
三、嵌入式Linux开发工具-gcc编译器: gcc(GND cc)
1.gcc特点(GUN工具、交叉编译器)
2.什么是交叉编译器?
在当前cpu平台下编译出在其他CPU平台下可执行的代码这个过程称为交叉编译器。或是在宿主机上编译在目标机上可运行的代码。(例如PC端使用x86处理器,手机使用arm处理器,在PC端编译的代码需要交叉编译器上处理过才可以在手机端运行。)
为什么要交叉编译
不同的处理器有不同的汇编,不同的汇编生成的可执行文件只能被当前的CPU所执行,为了在其他平台运行起来必须使用交叉编译。
3.源文件到可执行文件需要经历哪几个步骤?
预处理(-E -I -D)、编译(-S)、汇编(-c)、链接
系统移植最重要的是交叉编译
(1)预处理(后缀名.i):头文件展开(gcc -E hello.c,将预处理文件加载到源文件中 -E是指在编译hello.c的时候只进行预处理。gcc -E hello.c > hello.i只展示预处理),宏替换,条件编译
(a) #include "stdio.h"和<stdio.h>的区别
<>搜索路径:系统的头文件目录(在根目录下面的usr,usr下面的include[/usr/include],找不到就报错。)
" "搜索路径:先在当前目录查找,找不到再到系统的头文件目录查找。
(b) 如果头文件.h既不在当前目录,也不再系统头文件目录中,比如在test目录下:需要在add.h前加上在test目录下(确定是静态的,若是其他地方,还要在这修改)。
在这里插入图片描述gcc hello.c add.c -Itest(****-I指定头文件的第三方搜索路径)
©宏替换#define
(d)条件编译
在这里插入图片描述
在这里插入图片描述
只打印 hello world!上述内容都不变,只将#define改为//#define,结果就会变成 welcome to stta!
静态添加删除#define 麻烦,动态操作更好
gcc hello.c -DMAX=100(也可以不加数值)
在这里插入图片描述

(2)编译(.s):将预处理文件(.i)编译成汇编文件(.s)并检查语法错误。
(a)gcc -S hello.c(-S指在编译阶段停下来)
(3)汇编(.o):将汇编文件编译成目标文件。(-c在汇编结束之后停下来)
gcc -c hello.c
(4)链接:建立符号表一可执行文件a.out
-o:重命名可执行文件
如下图,将a.out可执行文件重命名为hello(名字任意取)
在这里插入图片描述
4.关闭警告信息:gcc hello.c -w -o hello(一般不关闭警告信息);将警告信息级别调高:
gcc -Wall hello.c -o hello
5.优化编译器 gcc -o3(指三级优化,还有-o1,-o2) optimize.c -o optimize
在编译时,首先将警告全打开,再把优化级别打开,再重命名:gcc -Wall -o3 hello.c -o hello
四、静态库和动态库的制作
1.什么是库文件?
保存函数和变量(仓库) 特点:保存的函数与变量,只能使用但不能看到其实现;
2.Linux库文件:
静态库(.a):在编译阶段加载;(将库文件的代码加载到源文件)
动态库(.so):在运行时加载;
3生成的可执行文件存在区别(优缺点)
(1)使用静态库形成的可执行文件大于动态库生成的可执行文件(程序运行占用内存较多)
(2)使用静态库生成的可执行文件难以升级,使用动态库生成的可执行文件易于升级。
(3)使用静态库生成的可执行文件运行速度快,使用动态库生成的可执行文件运行速度慢。
(4)使用静态库可执行文件里的代码容易部署,动态库难以部署。
4.Linux库文件存放路径:(自动搜索路径)
/lib:存放的是系统运行所需要的库。
/usr:存放的是程序运行所需要的库。
5.如何制作静态库?
(1)将需要保存的函数所在的文件编译生成目标文件 gcc -c add.c------>add.o
(2)静态库的制作工具:ar
ar rcs(不存在就创建,存在就更新) 库名 目标文件名
ar rcs libadd.a(lib和a是后缀,add为文件名) add.o
(cp libadd.a/lib or /usr/lib)
(3)使用
gcc 源文件 -l库名 -L库存放的路径
gcc main.c -ladd -L. -o add
若将cp libadd.a /usr/lib中了,只要写 gcc main.c -ladd -o add即可
在这里插入图片描述

上述图片,vim add.h和vim sub.h都没有创建,直接在main.c中声明即可。
若创建,要在main.c中加上#include"add.h"和#include"sub.h"
6.如何制作动态库
(1)gcc -shared -fPIC源文件 -o libcal.so
gcc -shared -fPIC add.c sub.c -o libcal.so
(2)cp libcal.so /usr/lib
gcc main.c -lcal
如果要使用当前路径,不能在-L.;必须gcc main.c ./libcal.so -o cal 才可以,必须要指定动态库在哪。
在这里插入图片描述

发布了10 篇原创文章 · 获赞 1 · 访问量 256

猜你喜欢

转载自blog.csdn.net/Noth_to_lose/article/details/104896276