动态库和静态库的区别
静态库:
在程序编译时会被链接到代码中,程序运行时将不再需要静态库。
后缀是lib
静态库的生成:
ar -rc
生成静态库的时候要使用.o文件来进行编译生成
gcc -c print.c -o print.oar -rc libtest.a print.ogcc main.c -L . -ltest -o main
动态库:
在程序编译并不会链接到代码中,而是在程序运行时被载入,动态库又被称为动态链接库,英文简称DLL,DLL是包含可以由多个程序使用的代码和数据的库,DLL是不可执行文件。
前缀
lib
后缀
.so
如何查看一个可执行文件所依赖的库?
ldd + 可执行程序
在linux操作系统下 静态库 linux后缀为.a文件
动态库 linux为.so文件
libhello.so
使用这个动态库,我们直接在makefile文件中 -hello
就行.
LD_LIBRARY_PATH是Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。并不是在编译阶段就起效果
ldd命令:
ldd是list, dynamic, dependencies的缩写, 意思是, 列出动态库依赖关系。
动态库的生成与使用
动态库生成:
gcc / g++ -shared : 产生共享库的命令行参数
-fPIC:产生位置无关的代码
我们来制作个动态库
先写个test.c
#include<stdio.h>
int print()
{printf("我是动态库\n");
}
gcc -shared -fPIC test.c -o libtest.so
我们写个测试的代码 main.c
#include<stdio.h>int main()
{print();return 0;
}
此时文件信息
如何让主函数使用这个libtest.so
gcc main.c -L . -ltest-L 指定链接的库文件路径
-l 链接的库文件路径 (去掉了前后缀)
这样就能找到这个动态库进行链接
**问题:**不论将程序依赖的动态库放到哪里程序都能找到自己依赖的动态库
1:将动态库放到可执行程序的目录下
可执行程序会搜索当前目录
2:环境变量
LD_LIBRARY_PATH : 保存动态库的搜索路径
我们来看这个路径下有什么
总结:
- echo: 显示某个环境变量值
- export: 设置一个新的环境变量
- env: 显示所有环境变量
- unset: 清除环境变量
- set: 显示本地定义的shell变量和环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:
/home/flf/second_stage_review/D_S_Library
每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串
解耦:互相的影响不是很大
静态链接:在生成可执行程序的时候,加上-static,将库文件内容编译到可执行程序中
静态库和静态链接有什么关系?
没关系。
动态库不止能动态链接,也可以在编译程序的时候静态链接,同理,静态库不仅仅能静态链接,也可以在编译程序的时候动态链接,生成一个动态链接的可执行程序。
动态库优点:
模块体积几乎不变,当多个模块使用该库时,内存中只存在一份代码。
缺点:代码在单独文件中有零散文件
静态库优点:
代码合并到模块中,无零散文件。
静态库缺点:
模块体积变大,多个模块使用库,内存中存在多份代码。
动态库和静态库的区别相关推荐
- ios 开发中 动态库 与静态库的区别
使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...
- 动态库、静态库、运行时库、引入库之间的区别
动态库.静态库.运行时库.引入库之间的区别 杂集.捡对口味的看看吧. 转自:http://lingualspark.blog.sohu.com/94785899.html 运行时库:Unix中一个典型 ...
- 头文件和库文件区别,动态库和静态库的区别,动静态库的生成
文章目录 一.什么是头文件?什么是库文件?有什么区别? 先说总结 目标文件 二.什么是静态库?什么是动态库?有什么区别? 三.为什么只用在程序头部写上包含的头文件,头文件中并没有实现内容就可以使用声明 ...
- mingw64下动态库和静态库链接的真正区别和用法(详细)
笔者一直以来都对mingw64下动态库和静态库链接的真正区别和用法存疑,于是做了一些测试,这篇文章记录了测试过程和测试结果,如果只想知道结果可以跳转到文章末尾 一.准备工作 首先准备三个测试文件 其中 ...
- Linux系统中动态库和静态库的区别
Linux系统中"动态库"和"静态库"那点事儿 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源 ...
- Linux动态库和静态库比较
Linux动态库和静态库比较文件预览 文件目录树如下,如你所见,非常简单. 1. libtest/ 2. |-- lt.c 3. |-- lt.h 4. `-- test.c ...
- 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )
文章目录 I . Android Studio 中使用 Android.mk 配置静态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...
- 动态库和静态库的创建
库:一组别人实现好的函数接口 1.命名方法 静态库 : libname.a 动态库 : libname.so 注意 :库的名字是name 2.链接动态库和静态库的区别 预处理,编译,汇编 ...
- c语言仿ce内存搜索工 源代码_C语言函数库:动态库和静态库优缺点比较
函数的重要性 我们在编写一个C语言程序的时候,经常会遇到好多重复或常用的部分,如果每次都重新编写固然是可以的,不过那样会大大降低工作效率,并且影响代码的可读性,更不利于后期的代码维护.我们可以把他们制 ...
- 动态库与静态库优缺点比较(转 侵删)
动态库与静态库优缺点比较 2017-10-09 13:32:01 我们在编写一个C语言程序的时候,经常会遇到好多重复或常用的部分,如果每次都重新编写固然是可以的,不过那样会大大降低工作效 ...
最新文章
- 为什么有些人非技术出身,却能带好团队?
- Servlet - HTTP超文本传输协议
- etcd分布式之负载均衡
- java flex 上传文件_使用Flex和java servlet上传文件
- 径向基RBF(radial basis function)函数、RBF神经网络、 反推(back-stepping)控制
- CSS简介及常用标签及属性
- 【PTA天梯赛CCCC -2017决赛L2-4】部落 (25 分)(图染色)
- javaweb servlet
- 诺微联盟催生智能手机的三足鼎立
- 循环获取另一个php变量,通过引用将多个变量传递给foreach循环(php)
- SploitFun Linux x86 Exploit 开发系列教程
- Android中app的请求抓包工具 Fiddler 详解
- 浅谈机器学习中的非线性
- 拿webshell的一些姿势
- 20款常用的商业智能(BI)工具分享(最新)
- 4g网络设置dns地址_上网速度慢,修改一下win10系统的DNS设置,网速飙升
- android webview 无法显示图片,Android解决WebView加载微信公众号文章不显示图片
- 2021年西式面点师(初级)考试题库及西式面点师(初级)考试试题
- ADC基本原理与STM32F030ADC应用
- oracle灾备同步_浅析Oracle数据库的三种灾备技术