2 dream20141119 Dream20141119 于 2014.12.09 17:22 提问

动态库是什么?怎么检查动态库是否正确?

什么是软件动态库?软件安装号之后如何检查动态库是否正确?手机软件安装之后会有动态库吗?

3个回答

zlling302
zlling302   2014.12.09 17:31
已采纳

动态链接库,也就是我们看到的DLL文件,如果少了DLL文件的话软件是运行不了的!,,手机这快我就不知道了

Rocloud
Rocloud   Rxr 2014.12.09 17:30

動態連結函式庫(Dynamic-link library,缩写为DLL)是**微软公司在微软视窗操**作系统中实现共享函数库概念的一种实作方式。这些函式庫函数的扩展名是.DLL、.OCX(包含ActiveX控制的函式庫)或者.DRV(舊式的系统驱动程序)。

所謂動態链接,就是把一些經常會共用的程式碼(靜態链接的OBJ程式庫)製作成DLL檔,當執行檔呼叫到DLL檔內的函數時,Windows作業系統才會把DLL檔載入記憶體內,DLL檔本身的結構就是可執行檔,當程式需求函數才進行链接。透過動態链接方式,記憶體浪費的情形將可大幅降低。靜態連結函式庫則是直接連結到執行檔。

DLL的文件格式与视窗EXE文件一样——也就是说,等同于32位视窗的可移植执行文件(PE)和16位视窗的New Executable(NE)。作为EXE格式,DLL可以包括原始碼、数据和资源的多种组合。

在更广泛的意义上说,任何同样文件格式的電腦檔案都可以称作资源DLL。这样的DLL的例子有扩展名为ICL的图标函式庫、扩展名为FON和FOT的字型文件。

Linux动态库的工作原理详解
Harlen Tan photo

关于动态库的原理和加载过程,网上也有很多版本,但是基本都在讲解动态库的编译以及使用,很少能够有文章对动态库的加载以及工作原理进行深入的剖析和讲解。说来也很惭愧,在过去的工作中,没能彻底的去弄清楚动态库的工作原理。直到最近工作中听到一些关于动态库加载以及工作原理的一些错误的理论,一方面为了推翻该理论,另一方面,正好借此机会彻底弄清楚动态库的工作原理。 后面还会详细讲解Linux动态库的加载原理《Linux动态库原理(二)重定位》

问题
在讲解动态库的工作原理之前,首先抛出几个问题,在讲解完之后,再回过头来分析问题。可能有些问题一看就是错的,但是我还是需要有正确的理论作为支撑来分析问题。

可以通过fork的方式,来降低使用同一个动态库的单独进程的内存占用。
问题背景
Android里面,可以通过adb shell showmap pid来查看某个进程的内存咱用其概况,中里面就列出来某个进程中某个动态库内存消耗,很多地方都称之为动态库的内存分摊。例如查看Android浏览器内存占用,里面将会有里边libwebcore.so内存占用 大小。所有就会有人觉得,动态库占用内存总量是一定的, 那么分摊的进程越多,最后分摊到单个进程上的内存占用就变得小了。所以可以通过这种技巧来降低内存占用。

如何优化动态库的内存占用?
如何优化动态库将在下一章节专门详细讲述。

eagleyan
eagleyan   Rxr 2014.12.10 04:02

所有系统都有动态库,unix/linux是so文件,windows是dll文件,macosx是dylib,动态库是为了减小可执行文件的大小,把共通的代码放在动态库里,这样不同的程序可以共用这段代码。静态编译的话会把静态库的代码编译进可执行文件,这样使得可执行文件的大小变得很大

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
问题集合 ---- linux 静态库和动态库创建、检查、使用建议
问题集合 ---- linux 静态库和动态库 =================================================================== linux静态库和动态库分析 本文转自 http://www.linuxeden.com/html/develop/20100326/94297.ht
关于程序运行时加载动态库失败的解决方法
错误提示如下: error while loading shared libraries: libjson.so.0: cannot open shared object file: No such file or directory 原因一般有两个,一个是操作系统中没有包含该共享库(lib*.so.* 文件)或者共享库版本不对。解决办法就是重新下载安装。 另外一个原因就是已经安装了
c语言中动态库的使用(启动时链接和运行时链接)
背景 c语言中存在静态库(.a)和动态库(.so)。 静态库实际上是一些目标文件的集合,只用于链接生成可执行文件阶段。链接器会将程序中使用到函数的代码从库文件中拷贝到应用程序中,一旦链接完成生成可执行文件之后,在执行程序的时候就不需要静态库了。 特性: 由于每个使用静态库的应用程序都需要拷贝所用函数的代码,所以静态链接的生成的可执行文件会比较大,多个程序运行时占用内存空间比较大(每个...
C++动态链接库测试实例
前话上一章节我导出了一个动态链接库要使用该链接库,我们还需要该链接库对外公开的函数,即头文件下面开始实例测试实例第一步——将动态链接库的dll、lib、和头文件导入项目中文件目录如下:项目目录如下:第二步——将dll动态库链接到项目中项目名右键->properties->Linker->Input->Addictional Denpendencies->输入动态链接库的lib文件名第三步——测试Te
动态库的使用方法
在编写程序时,动态库是常常用到的工具,在vs等编程环境下只需要,完成工程的本地化配置或是直接将dll配置到环境变量即可(不推荐,毕竟小题大做了),而对于像楼主这样刚刚接触Linux操作系统的菜鸟来说,配置动态(共享)库还不是一个简单的问题。在介绍动态库的调用方法之前,先介绍一下动态库的编译(如何生成so文件)需要一个包含几个方法声明的头文件和对应的定义文件。 再介绍共享库的显示和隐式调用
编译动态库可用未声明的函数
现象:成功编译某个动态库,可是当用该动态库编译可执行
如何显示动态库的的依赖关系
X86环境下: root@192.168.1.197:/usr/bin#ldd /usr/lib/libglib-2.0.so     linux-gate.so.1 =>  (0x00ccc000)     libpcre.so.3 => /lib/libpcre.so.3 (0x00110000)     libc.so.6 => /lib/tls/i686/cmov/lib
[linux]【编译】【高级01】 - 动态库的设定和依赖性的检查 20160921更新 文章没有最终结案
ldd命令的作用是查看程序依赖的动态链接库信息。使用nm命令也可以获取库函数的信息;nm命令可以列出一个函数库文件中的符号表,它对静态的库函数和共享的库函数都能起作用。 Linux动态库的默认搜索路径是/lib和/usr/lib。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库,并且该动态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应的动态库文件,然后
linux命令之查看程序动态库依赖-ldd
一个程序依赖很多的动态库,类似windows下的depends工具可以查看exe程序的依赖库是否找到。在linux下,可以通过ldd命令查看程序是否能找到依赖的动态库,从而排查是缺少库还是由于环境变量配置不正确导致的程序无法启动。 在shell环境下输入ldd --help查看ldd命令的选项: 用法:ldd [选项]… 文件… --help 印出这份说明
动态连接库和符号(symbol)
strip符号表  对于.so库,strip过后仍然可以被链接。因为用于链接的.dynsym节仍在。  对于.o文件,strip过后确实不能在连接编译成目标文件。因为.o文件不是目标文件,和.so文件不同,它并没有.dynsym节用于导出符号给外部程序。所以我认为编译器用于链接成目标文件的符号表就是我们objdump出来看到的那张