Linux基本指令(8)

库:

是编程中“预先写好的代码的工具箱”,用途在于:减少重复定义的问题

库的优点:

1、别人直接用,不需要额外编译,防止编译环境不同

2、不希望别人知道自己.c的内容

静态库:libxxx.a

编译好的二进制代码的集合,本质上是多个目标文件(.o)的打包归档

静态库特点:

如果根据库编译出来的可执行程序,就算库删除了,也能继续执行

创建静态库的方式:

-L后面在库所在的位置  -l后面跟库的名称(只需不同部分)

ar  crv  libfool.a  main.o  max.o  add.o

windows:后缀为.lib

如果将库放置在系统库中(/usr/lib)中,则在gcc编译阶段不需要加-L指明位置,只需要-l说明添加的库

静态库优点:

如果库不经常进行改动维护,那么生成的可执行程序使用较久

动态库:libxxx.so(共享库windows)

生成共享库的指令

gcc  -shared  -fPIC  -o  libxxx.so  add.o   main.o   max.o

动态库文件:

可以被多个程序动态加载和共享的文件 

动态库后缀(windows   .dll)

-shared :

告诉编译器将目标文件加载成动态库

-fPIC:

生成位置无关代码(动态库的特性)代码不依赖于特定的内存地址,无论动态库加载到内存的什么位置,都能正常执行

动态库在程序运行时由操作系统分配内存地址,而不是编译的时候固定地址

动态库编译出的代码无法直接运行

ldd:

查看可执行程序使用了哪些动态库

动态库优点:

适合更新频繁的程序,只需要找到动态库的位置即可,可执行程序大小相较于静态库生成的可执行文件较小

找不到库:

解决方法:

1、将共享库拷贝到标准目录下(usr/lib)

当动态库被删除时,原本能执行的可执行程序就没办法执行了

2、告诉程序,该动态库就在当前目录下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值