2022/1/17

静态库.a:保存的函数和变量,在编译阶段加载到可执行文件中

动态库.so:保存的函数和变量,在执行阶段加载到执行文件中

使用静态库和动态库的区别(可执行文件的区别):

1.使用静态库编译出来的可执行文件的大小 >使用动态库编译出来的可执行文件大小 影响内存的开销。

2.使用静态库编译出来的可执行文件的执行速度>使用动态库编译出来的可执行文件的执行速度

3.对功能做升级的时候,动态库优于静态库。

4.使用静态库编译出来的可执行文件的部署优于动态库

库文件的存放路径:

系统运行所需要的库文件:/lib 第三方软件和工具所需要的库:/user/lib

gcc -I(i大写)指定你的头文件在哪里
gcc -L(指明库的路径:当前目录下)
gcc -l指定库名   libname.a    库名必须如此

 name是自己定义的,只需要它就行lib 和.a固定中间是自己取的库名gcc -lcal(小写) 

静态库的创建:gcc -c 源文件.c  ----创建目标文件
使用ar工具生成静态库:        

         ar rcs 静态库名 目标文件1 目标文件2   -----将目标文件加入到库中
        rc :静态库不穿在时,就创建该库
        s:更新库文件
gcc main.c -o main -L.(指明库的路径:当前目录下) -lcal     (指出自定义头文件的位置)-I./tmp


动态库的创建:
gcc -shared -fPIC -o 库名.so 源文件.c
动态库的使用:
gcc 源文件.c ./库名.so -o 可执行文件名

学习GDB的三步走:

1.学习使用gdb(基础命令)

2.掌握GDB的场景的使用技巧(多任务,网络程序,内存管理,core,汇编程序)

3.实现gdb (实现一个调试器:应用程序)

gdb命令:

run:在调试器中运行程序

list:查看程序源码

break+行号:设置断点

break+行号+if条件:设置断点

break+函数名:设置断点

delete+断点编号:删除断点

enable/disable:使能断点

print +/x 变量名:查看变量值

next:单步执行,不进入子函数

step:也是单步执行,进入子函数

continue:继续执行直到遇到下一个断点

finish:继续执行,在函数内部时,执行到函数结束

call + 函数名:调用函数

print + 变量=值: 设置变量的值

clear:清楚所有断点

ptype +变量:查看变量的类型

gdb +可执行文件 + --tui:启动图形化调试窗口

layout asm :显示汇编

layout src :显示源代码

layout split:显示源代码+汇编

工程管理器make --------如何编辑makefile文件?
什么是过程?多个源文件+其他文件(图片+头文件+脚本文件)
工程管理器的作用:编译多个源文件?------gcc+所有的源文件 -o 可执行文件-------> 可以实现自动编译
make的依赖makefile文件;
makefile文件是一种脚本文件(批处理),存在相关语法;
makefile语法:
三要素:目标,依赖,命令
格式:
目标:依赖(此处换行)
(TAB键)命令
目标:最终生成的文件。
依赖;生成目标时所需要的文件
命令:生成目标时。需要执行的命令
如实现 hello world
hello:hello.c
    gcc hello.c -o hello

伪目标:
.PHONY:clean(伪目标名clean)  install
clean:install(依赖)                             ____不会生成目标文件
    rm -f hello hello.o                       @rm -f hello hello.o  (@可以取消回显,表示终端不再显示该命令)
                @echo make done!(加入该语句显示,意味执行成功)
install:
    cp hello bin
make clean           --------------执行rm -f hello hello.o且不生产目标文件
make hello.o
make 目标体  则从目标体处开始执行;如果make后面不跟目标体则直接执行
make的执行顺序:
    make:默认从第一个目标提执行
    make+目标体:从对应的目标体执行。如果目标体后面依赖的文件是一个目标的花,先执行依赖对应的目标,再执行目标体的具体命令

makefile和Makefile都可以使用:大小写makefile都存在时make 调用小写makefile
make -f Makefile调用大写Makefile文件   在makefile文件中,#代表注释,注释单独一行
有需求关系的时候,被需求的写在后面;所以终极目标写在第一行
makefile的默认内置变量
$@:表示目标文件的名称,包含扩展名
$^:表示所有的依赖文件,以空格隔开,不重复
$<:表示第一个依赖文件的名称
$+:表示所有的依赖文件,空格隔开,可以重复
$*:表示目标文件的名称,不包含扩展名
$?:依赖项中,所有比目标文件新的依赖文件
 make menuconfig ----- 图形化


shell 是什么?shell是一个命令行解释器
作用是遵循一定的语法将输入的命令加以解释并传给系统
shell既是一种命令语言,又是一种程序设计语言
命令程序就是脚本程序通过shell计算机可直接运行
程序基础:
    #!/bin/sh
#!用来告诉系统它后面的参数是用来执行该文件的程序
要使脚本可执行:
chmod + x filename
./filename 执行脚本
变量:
变量名=值
变量赋值时,“=”两边不可以加空格
bash中的语句结尾不需要分号
int main(int argc,char *argv[],char ** env)
*argv[] --------**argv
默认变量:
$#;传入脚本的命令行参数的个数
$*:所有命令行参数值。在各个参数值间留有空格

$0:命令本身

$1:第一个命令行参数

$2:第二个命令行参数

shell中的IF语句

例一:

if [expression]

        then

                #code block

        fi

if [expression]

        then

                #code block

        else 

                #code block

        fi

例二:

if [expression]

        then

                #code block

        else if [expression]

                       then

#code block

        else

#code block

        fi

fi

无论几重嵌套都是以两个fi结尾

比较操作           整数操作                字符串操作

相同                        -eq                                =

不同                        -ne                                !=

大于                        -gt                                 >

小于                        -it                                    <

大于或者等于                -ge

小于或者等于                -le

为空                               -z

不为空                             -n

例:

比较整数a和整数b是否相等: if[ $a = $b ]

比较整数a是否大于整数b:          if[ $a -gt $b ]

比较字符串a是否大于字符串b:          if[ $a = $b ]

判断字符串是否为空: if [ -z $a ]

注:在[   ]   两边都要留有空格

在‘=’两边也有空格

-e 文件已存在

-f 文件是普通文件按

-s 文件大小不为0

-d 文件是一个目录

- r文件对当前用户可以读取

- w文件对当前用户可以写入

-x 文件对当前用户可以执行

&&---------与运算    ||     或运算       都是短路运算符;短路属性

FOR语句

for var in [list]

do 

        #coed block

done

其中var是循环控制变量。[list]是var需要变量的一个集合,do/done包含了循环体,相当于c语言的大括号,另外do 和for被卸载同一行,必须在do前面加上“;”如:for var in [list];do

while语句

while循环结构的是:

while  [condition]

do

        #code block

done

Unitl语句

unitil  [condition]

do 

        #code block

done

while和until的区别在于while为真时执行,until为假时执行

case语句:

case "$var" in

contidion1);;

contidion1);;

.....

*)

default statements

esac

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值