问题描述
- 动态库是什么?怎么检查动态库是否正确?
- 什么是软件动态库?软件安装号之后如何检查动态库是否正确?手机软件安装之后会有动态库吗?
解决方案
动态链接库,也就是我们看到的DLL文件,如果少了DLL文件的话软件是运行不了的!,,手机这快我就不知道了
解决方案二:
動態連結函式庫(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内存占用 大小。所有就会有人觉得,动态库占用内存总量是一定的, 那么分摊的进程越多,最后分摊到单个进程上的内存占用就变得小了。所以可以通过这种技巧来降低内存占用。
如何优化动态库的内存占用?
如何优化动态库将在下一章节专门详细讲述。
解决方案三:
所有系统都有动态库,unix/linux是so文件,windows是dll文件,macosx是dylib,动态库是为了减小可执行文件的大小,把共通的代码放在动态库里,这样不同的程序可以共用这段代码。静态编译的话会把静态库的代码编译进可执行文件,这样使得可执行文件的大小变得很大