Linux笔记2

4 篇文章 0 订阅
1 篇文章 0 订阅

嵌入式开发工具:
1.编译器GCC(查语法错误)
2.调试器GDB(查功能错误)
3.工程管理器:make
4.脚本shell(脚本文件不用编译可直接执行)
工程文件:进行多文件操作。
源文件.c——预处理.i——编译.o——链接——可执行.exe/.out
执行c语言的过程就是执行主函数的过程。函数 用来封装对应的功能
gcc的基本用法:
gcc [编译器所需要的编译选项 ] [文件名
-wall :打开所有的警告项
-O:设置优化级别
-g:加入可调式工具
-c:只编译,生成.o为后缀的目标文件(自动生成)
-o:用来指出输出文件的名字
-E:预处理(不生成任何输出文件) gcc -E hello.c -o hello.i
-D xxxx:定义了xxxx宏,相当于定义了#define
-U xxxx:取消了xxxx宏定义
-I xxxx:将xxxx所指出的目录加入到程序头文件目录列表中(不影响以前的目录)
-L xxxx: 将xxxx所指出的目录加入到库文件的目录列表中
-s :产生汇编代码
-C :不删除注释信息编译
-lname:在连接时装载名字为“libname.a”的函数库,该函数库位于系统预设的目录或者由
-L选项确定的目录下
例如,-lm表示连接名为“libm.a”的数学函数库.
-static:静态链接库文件
程序库:包含了一些通用函数的数据和二进制可执行机器码的文件,其单独不能够运行。(目标文件)
静态库:是在执行程序之前就已经加入到执行代码中,成为执行程序的一部分来执行的,后缀名:.a
动态库:是在执行程序启动时加载到执行代码中,后缀名:.so
静态库的创建:
创建: gcc –c 源文件.c
ar rcs 静态库名 目标文件1 目标文件2
rc:静态库不存在,就创建该库文件
s:更新库文件
静态库的使用: 静态库创建成功后,然后对全局变量和函数进行声明,在编译的时候加上库文件就行!
gcc -o file flie.c –L. -lname
ar -t libcalculate.a 查看静态库
-d libcalculate.a add.o 把add.o文件删掉
-dv 删除提示 -xv 提取出库文件
动态库的创建:
gcc -shared -fPIC -o 库名.so 源文件.c
动态库的使用:
gcc 源文件.c ./库名.so -o 可执行文件名

调试器 GDB:
GDB主要完成三个功能:
1.启动被调试程序。
2.让被调试的程序在指定的位置停住。
3.当程序被停住时,可以检查功能。
步骤:1.编译生成可执行文件:$gcc -g tst.c -o tst
2.启动GDB: g d b t s t 3. 设 置 断 点 : b r e a k ( b ) 4. 运 行 : r u n ( r ) 5. 单 步 运 行 : n e x t 或 回 车 ( 不 进 入 子 函 数 ) 6. 继 续 运 行 : c o n t i n u e ( c ) 单 步 运 行 s t e p ( s ) ( 进 入 子 函 数 ) i n f o b r e a k 查 看 断 点 d e l a t e 断 点 编 号 删 除 断 点 d e l a t e + 断 点 号 d i s a b l e b r e a k 断 点 失 效 i n a b l e b r e a k 断 点 生 效 f i n i s h 运 行 程 序 , 直 到 当 前 函 数 结 束 q 退 出 G D B 模 式 l i s t ( l ) 查 看 程 序 ( 只 显 示 10 行 ) c l e a r 删 除 所 有 断 点 d i s p l a y + 表 达 式 : 显 示 表 达 式 的 结 果 p r i n t ( p ) 变 量 名 显 示 指 定 变 量 的 值 w a t c h + 变 量 名 对 指 定 变 量 进 行 监 控 ( b 5 i f I = 10 ) 当 I = 10 时 , 第 五 行 短 点 生 效 m a k e 工 程 管 理 器 ( m a k e f i l e 是 m a k e 读 入 的 唯 一 配 置 文 件 ) 编 写 规 则 : a . 需 要 由 m a k e 工 具 创 建 的 目 标 体 ( t a r g e t ) , 通 常 是 目 标 文 件 或 可 执 行 文 件 。 ( 第 一 个 t a r g e t 为 终 极 目 标 , 有 且 只 有 一 个 ) b . 要 创 建 目 标 体 所 依 赖 的 文 件 , 创 建 每 个 目 标 体 时 需 要 运 行 的 命 令 ( c o m m a n d ) , 这 一 行 必 须 以 制 表 符 t a b 键 开 头 。 例 : ! [ 在 这 里 插 入 图 片 描 述 ] ( h t t p s : / / i m g − b l o g . c s d n i m g . c n / 20181113151841829. p n g ? x − o s s − p r o c e s s = i m a g e / w a t e r m a r k , t y p e Z m F u Z 3 p o Z W 5 n a G V p d G k , s h a d o w 1 0 , t e x t a H R 0 c H M 6 L y 9 i b G 9 n L m N z Z G 4 u b m V 0 L 1 B v b G x v d 18 = , s i z e 1 6 , c o l o r F F F F F F , t 7 0 ) 格 式 : t a r g e t : d e p e n d e n c y f i l e s &lt; T a b &gt; c o m m a n d / ∗ 该 行 必 须 以 t a b 键 开 头 ∗ / 使 用 M a k e f i l e : gdb tst 3.设置断点: break (b) 4.运行:run (r) 5.单步运行:next或回车(不进入子函数) 6.继续运行:continue(c) 单步运行 step(s)(进入子函数) info break 查看断点 delate 断点编号删除断点 delate+断点号 disable break 断点失效 inable break 断点生效 finish 运行程序,直到当前函数结束 q 退出GDB模式 list(l)查看程序(只显示10行) clear 删除所有断点 display +表达式:显示表达式的结果 print(p)变量名 显示指定变量的值 watch +变量名 对指定变量进行监控 (b 5 if I=10)当I=10时,第五行短点生效 make 工程管理器 (makefile是make读入的唯一配置文件) 编写规则: a. 需要由make工具创建的目标体(target),通常是目标文件或可执行文件。(第一个target为终极目标,有且只有一个) b.要创建目标体所依赖的文件,创建每个目标体时需要运行的命令(command),这一行必须以制表符tab键开头。 例: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181113151841829.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BvbGxvd18=,size_16,color_FFFFFF,t_70) 格式: target:dependency_files &lt;Tab&gt; command /*该行必须以tab键开头*/ 使用Makefile: gdbtst3.breakb4.runr5.next()6.continuecstepsinfobreakdelatedelate+disablebreakinablebreakfinishq退GDBlistl10cleardisplay+printpwatch+b5ifI=10I=10makemakefilemakea.maketargettargetb.(command)tab![](https://imgblog.csdnimg.cn/20181113151841829.png?xossprocess=image/watermark,typeZmFuZ3poZW5naGVpdGk,shadow10,textaHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BvbGxvd18=,size16,colorFFFFFF,t70)targetdependencyfiles<Tab>command/tab/使Makefile make
gcc -c hello.c -o helllo.o
$ ls
hello.c hello.h hello.o makeflie
伪目标特点:不是任何目标的依赖,自身没有依赖
作用:执行某一个命令 执行伪目标:make
.PHONY:clean 声明clean是伪目标
在Makefile中存在系统的默认变量:
$^:代表所有的目标文件
$@:代表目标
$<:代表第一个目标文件
@:取消回显。加到命令的前面
#:注释

脚本:-shell 命令行解释器:遵循一定的语法将输入的命令加以解释并传给系统。用户可以用shell来启动、挂起、停止甚至是编写一些程序。
本质上,shell script 是命令行命令简单的组合到一个文件里面。
程序基础:
1.必须以 #!/bin/sh 放在文件的第一行
2.chmod +x filename
3.输入 ./filename 来执行脚本
注意:
shell变异中所有的变量都由字符串组成并不需要声明
去变量值时要在前面加$符号
变量赋值时“=”两边不能有空格
BASH语句结尾不需要分号
回显echo $a
shell默认变量:
$# :传入脚本的命令行参数个数
$* :所有命令行参数值在各个参数值间留有空格
$ 0:命令本身
$ 1:第一个命令行参数
$ 2:第二个命令行参数
相同(-eq)不同(-ne) 大于(-gt) 小于(-lt) 大于或小于(-ge) 小于或等于(-le) 为空(-z) 不为空(-n)
循环:while 当型循环
until 直到型循环
case 用于进行多项分支控制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值