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

问题描述

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

解决方案

动态链接库,也就是我们看到的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,动态库是为了减小可执行文件的大小,把共通的代码放在动态库里,这样不同的程序可以共用这段代码。静态编译的话会把静态库的代码编译进可执行文件,这样使得可执行文件的大小变得很大

时间: 2024-10-30 13:27:38

动态库是什么?怎么检查动态库是否正确?的相关文章

PHP的拼写检查函数库

在使用这个函数前,需要先到 http://metalab.unc.edu/kevina/aspell 取回所需的拼写检查函数库 aspell library.  aspell_new :  载入一个新的字典.  aspell_check :  检查一个单字.  aspell_check-raw :  检查一个单字,即使拼错也不改变或修正.  aspell_suggest :  检查一个单字,并提供拼写建议.  aspell_new载入一个新的字典.语法: int aspell_new(strin

在Android中通过jni方式使用编译好的FFmpeg库-Android中使用FFmpeg媒体库(二)

原文:http://doandroid.info/?p=471 在继上篇在32位的Ubuntu 11.04中为Android NDK r6编译FFmpeg最新版0.8.1后,本人来给大家展示一下如何在Android中使用编译好的FFmpeg库. 整体调用逻辑为: 1 编译完ffmpeg库 2 使用jni方式撰写c代码,其中需要包含相应的ffmpeg的头文件 3 撰写相应的Android.mk文件,里面指定需要编译的c代码以及需要链接的动态库 4 执行ndk-build生成相应的jni库 5 创建

Web---JSTL(Java标准标签库)-Core核心标签库、I18N国际化、函数库

前面为JSTL中的常用EL函数,后面的为具体演示实例! JSTL简介: JSTL(Java Standard Tag Library) –Java标准标签库. SUN公司制定的一套标准标签库的规范. JSTL标签库,是由一些Java类组成的. JSTL组成: JSTL –Core 核心标签库. 重点 JSTL – I18N - 国际化标签库.Internationalization- I18N JSTL – SQL – 数据库操作标签(有悖于MVC设计模式),现在都不用这个. JSTL - Fu

编译可在Android上运行的依赖库(一):glib库

编译可在Android上运行的依赖库(一):glib库 作者:寻禹@阿里聚安全 前言 这是系列文章,它们由<编译可在Android上运行的glib库>及其他4篇文章组成,这4篇文章在"编译依赖库"一节中列出.由于glib库依赖于其他第三方库,所以需要先将依赖的第三方库交叉编译到Android平台上才能成功的编译glib库,系列文章中除<编译可在Android上运行的glib库>外的其他交叉编译文章均是介绍如何对glib依赖库进行交叉编译.以上,所以叫系列文章,因

mfc-MFC动态加载图片失败,HBITMAP创建不正确

问题描述 MFC动态加载图片失败,HBITMAP创建不正确 在下图所示的PictureControl中动态加入位图,位图文件位置保存在szBMP0(CString)中,Picture控件中创建m_PIC_BMP0变量,但是图片无法加载,加载图片的句柄显示CXX0030无法计算的表达式,加载图片失败,请大神解答~谢谢!__窗口图片说明! 解决方案 CBitmap bmp; bmp.LoadBitmap(IDB_PAGE2); GetDlgItem(IDC_PIC)->SetBitmap((HBIT

link环境下制作一款《订餐软件》,调库的实现?请问调库怎么调?

问题描述 link环境下制作一款<订餐软件>,调库的实现?请问调库怎么调? link环境下制作一款<订餐软件>,调库的实现?请问调库怎么调? 解决方案 不知道你说的调库是什么,调整什么?可以用alter去修改表和数据库的结构.

编译可在Android上运行的依赖库(三):libffi库

编译可在Android上运行的依赖库(三):libffi库 作者:寻禹@阿里聚安全 前言 libffi版本:3.2.1. 本文在Ubuntu 64位系统上对libffi项目进行交叉编译. 下文中的"NDK"若无特殊说明均指"Android NDK". 步骤 1. 下载并安装Android NDK 下载并安装Android NDK的过程在这里不做介绍. 2. 下载libffi 到libffi的官网去下载这个库的源码.官网地址:https://sourceware.or

编译可在Android上运行的依赖库(二):gettext库

编译可在Android上运行的依赖库(二):gettext库 作者:寻禹@阿里聚安全 前言 gettext版本:0.19.7. 本文在Ubuntu 64位系统上对gettext项目进行交叉编译. 下文中的"NDK"若无特殊说明均指"Android NDK". 注意:不要运行gettext源码目录下的autogen.sh文件.如果先运行autogen.sh然后运行configure再然后使用make命令编译时,编译会出错. 步骤 1. 安装必要的工具 如果不安装这些工

编译可在Android上运行的依赖库(五):pcre库

编译可在Android上运行的依赖库(五):pcre库 作者:寻禹@阿里聚安全 前言 pcre版本:8.38. 本文在Ubuntu 64位系统上对pcre项目进行交叉编译. 下文中的"NDK"若无特殊说明均指"Android NDK". 步骤 1. 下载并安装Android NDK 下载并安装Android NDK的过程在这里不做介绍. 2. 下载pcre 到pcre的官网去下载这个库的源码.官网地址:http://pcre.org/ 3. 设置NDK和SYSROO