3.10嵌入式设计(总结)

嵌入式Linux开发工具—vim、gcc、gdb、make

vim(文本编辑器):学会使用和如何配置vim;
gcc(编辑器):学会制作动态库和静态库及使用与区别;
gdb(调试器):设置断点、单步执行、调试内存错误;
make(工程管理器):编写makefile文件;

vim(Linux文本编辑器):
Vim是一个功能强大的全屏幕文本编辑器, 是Linux/UNIX上最常用的文本编辑器, 它的作用是建立、编辑、显示文本文件。
注意:Vim 没有菜单,只有命令。
vim有三种模式:  
1.普通模式
使用vim命令打开文件,只能使用上下左右键移动光标,并且操作复制,粘贴,删除等之类的工作。
2.编辑模式
普通模式下不能对文件内容进行编辑,要按下“i、a”字母,进入编辑模式之后才可以执行录入文字。
编辑模式有一个插入的标记“INSERT”在屏幕的最下方
3.命令模式
在普通模式下,输入“Shift+:”时,光标会自动定位在那一行,此模式中可以执行保存(w),退出(q)等相关操作。

gcc(编辑器):
gcc是什么?
答:GCC(GNU C Compiler)是目前Linux下最常用的C语言编译器。GCC是GNU推出的功能强大、性能优越的多平台编译器;可以在多种硬件平台上编译出可执行程序的超级编译器,而且较一般的编译器执行效率高。
什么是交叉编译器?
答:在当前CPU平台下编译出其他CPU平台下可执行的代码。
源文件到可执行文件需要经历哪几个步骤?
答:预处理(Pre-Processing)
编译(Compiling)
汇编(Assembling)
链接(Linking)
常用的编译选项:
-E : 预编译产生.i文件
-s : 编译文件产生 . s 汇编文件
-c : 产生二进制文件.o文件
-g : 添加debug调试工具 //
-D:等同于#define
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文件
gcc -DENTER hello.c -o hello
time ./hello 运行可执行文件hello ,time可以显示时间
Gcc -O hello.c -o hello 优化编译
Gcc -O2 hello.c -o hello 优化更多

警告文件:
-Wall 显示所有的警告信息;
-w 不显示;
注意错误都会显示

以上斜体出自:
原文地址

静态库和动态库的制作

什么库文件?
保存函数和变量(仓库)
特点:保存的函数与变量只能使用但不能看到其实现。
Linux库文件:
静态库:在编译阶段加载;(将库文件的代码加载到源文件)
动态库:在运行时加载。
如何制作静态库:
1、将需要保存的函数所在的文件编译生成目标文件
gcc -c add.c—>add.o
2、静态库制作工具:ar
ar rcs(不存在就创建,存在就更新) 库名 目标文件名
ar rcs libadd.a add.o
(cp libadd.a /lib or /usr/lib)
3、使用
gcc源文件 -l库名 -L库存放的路径
gcc main.c -ladd -L. -o add

如何制作动态库:
gcc -shared -fPIC 源文件 -o libcal.so
gcc -shared -fPIC add.c sub.c -o libcal.so
使用:
cp libcal.so /usr/lib
gcc main.c -lcal
gcc main.c ./libcal.so -o cal

静态库和动态库在生成可执行文件存在区别(优缺点)
1、使用静态库生成的可执行文件大于动态库生成的可执行文件(程序运行占用内存较多)
2、使用静态库生成可执行文件难以升级;使用动态库生成的可执行文件易于升级;
3、使用静态库生成可执行文件运行速度快;使用动态库生成的可执行文件运行速度慢。

gcc -static作用
当gcc -static 用于编译一个程序时,会使此程序静态编译(把动态库的函数和所依赖的任何的东西,都编译进本程序),编译好后,文件会非常大,但是,运行时就不需要依赖任何动态库。

代码交流 2021