静态库和动态库的分析
来源:互联网 发布:知乎 自动铅笔 推荐 编辑:程序博客网 时间:2024/05/22 13:59
学习笔记,小白可以相互学习,大佬看到能告诉咱理解不对的地方就好了。
库的概念:
从本质上来说库就是一种可执行代码的二进制形式,可被操作系统载入内核执行。
linux和windows本质不同,二者库的二进制是不兼容的。
1.静态库
静态库在程序编译时才会被连接到目标代码中,程序运行时不需要该静态库,因此体积较大。
优点:静态库对函数库的链接是放在编译时期完成的,程序运行时与函数库没关系,移植方便。
缺点:浪费空间和资源,因为所有相关的对象文件与牵涉到的函数库被链接合成一个可执行文件。
1.1创建静态库
创建静态库使用ar命令,它将很多.o转换成.a
a. gcc -c hello.c (生成hello.o文件(目标文件))
b. ar crs libmyhello.a hello.o(把目标文件生成库,myhello是库名)
静态库的命名规范是以lib为前缀,紧接着接静态库名,扩展名为.a
c. gcc -o hello main.c -L -lmyhello(编译时记得链接库)
2.动态库
动态库在程序编译时并不会被连接到目标代码中,而是在程序运行时才被载入。动态库把对一些函数的链接载入延迟到程序运行的时期。
优点:可以实现进程之间的资源共享,将一些程序的升级变得简单,甚至可以做到链接载入完全由程序员在程序代码中控制。
2.1创建动态库
a. gcc -fPlC -Wall -c hello.c(生成目标文件)
b. gcc -shared -o libmyhello.so hello.o(生成库文件)
动态链接库的名字形式为“libxxx.so”,后缀名为.so
2.2使用动态库的方法
1.cp limyhello.so /usr/lib/(直接把库拷贝到/usr/lib目录下)
2.在LD_LIBRARY_PATH环境变量中加上库所在路径
设置路径:export LD_LIBRARY_PATH = /home/farsight/hello(这个是库所在的目录路径,可使用命令pwd查看当前路径)
再gcc test.c -lmyhello -L就可以了
3.添加/etc/ld.so.conf.d/*.conf文件,把库所在路径加到文件末尾,并执行ldconfig刷新
建立sudo vim /etc/ld.so.conf.d/*.conf 文件
再sudo ldconfig刷新
再gcc test.c -lmahello -L编译
最后直接./a.out执行就可了
ldd命令可以查看一个可执行程序依赖的共享库
#ldd /bin/inlibc.so.6
- 静态库和动态库的分析
- 静态库和动态库的分析
- 静态库和动态库的分析
- Linux静态库和动态库的分析
- Linux静态库和动态库的分析
- 关于Linux静态库和动态库的分析
- 关于linux静态库和动态库的分析
- 关于Linux静态库和动态库的分析
- 【zz】关于Linux静态库和动态库的分析
- 【转】关于Linux静态库和动态库的分析
- 关于Linux静态库和动态库的分析
- Linux静态库和动态库的分析
- 关于Linux静态库和动态库的分析
- 关于Linux静态库和动态库的分析
- 关于Linux静态库和动态库的分析
- 摘抄-linux的静态库和动态库分析
- 关于Linux静态库和动态库的分析
- 关于Linux静态库和动态库的分析
- java系统高并发解决方案
- 田忌赛马
- c#图像处理、图片拼接、图片裁剪、图片缩放、图上添加形状、屏幕截图、图片反色、改变图片色彩度全解
- imx6的mipi接口在qnx系统中的调试技巧,vcapture-test功能应用
- 无线中继和无线桥接
- 静态库和动态库的分析
- 自己动手写操作系统:4.模拟软盘的数据结构,加载指定软盘扇区中的数据
- ORACLE RAC集群的体系结构
- HDU 2017 多校联赛5 1011 Rikka with Competition
- WiFi有死角? 巧用旧无线路由器扩展覆盖.WDS设置
- 容器Collection的总结一 Vector ArrayList LinkedList HashSet TreeSet
- Spring MVC原理及配置详解
- 无线信号不好,如何进行扩展?(中继、无线桥接、级联、HyFi、AP/AC)
- QAQ & 火星情报局