动态链接与共享库详解

需积分: 47 4 下载量 150 浏览量 更新于2024-09-08 1 收藏 456KB PDF 举报
"这篇资料详细介绍了共享库和动态链接的概念,以及它们在操作系统中的应用,主要针对Windows的DLL和Linux的SO文件。" 共享库和动态链接是解决静态库所带来问题的有效方法,如内存浪费和磁盘空间的过度占用。静态库会将库函数直接嵌入到每个执行文件中,当系统运行大量进程时,会造成大量的主存资源消耗。同样,由于每个执行文件都包含了相同的库代码,磁盘上的存储空间也会受到显著的影响。此外,静态库的更新和管理也不够灵活,需要程序员频繁检查和更新。 为了解决这些问题,引入了共享库(在Windows中称为动态链接库,.dll文件;在Linux中称为动态共享对象,.so文件)。共享库是一个独立的目标文件,包含了代码和数据,可以在多个程序之间共享,从而在内存和磁盘上只保存一份副本。这极大地节省了资源。在Linux系统中,动态链接通常由动态链接器ld-linux.so自动处理,例如标准C库libc.so就是按照这种方式动态链接。而运行时链接则可以通过dlopen()等接口在程序运行过程中完成,这对于分发软件包和构建高性能Web服务器等场景特别有用。 动态链接提供了诸多优势。首先,由于内存中只有一个备份,所有进程都可以共享,大大节省了内存空间。其次,共享库可以被多个程序链接,减少了磁盘上的文件数量,节约了磁盘空间。此外,共享库的升级只需要更新库文件,新的版本会在下次程序运行时自动加载,使得更新变得简单。再者,共享库允许模块化开发,不同模块可以用不同的编程语言编写,提高了开发效率。最后,第三方开发者可以创建共享库作为程序插件,方便程序功能的扩展。 创建自定义的动态共享库文件在Linux环境中通常涉及以下步骤:首先,编译源代码(如myproc1.c和myproc2.c),然后使用`gcc`命令,添加`-shared`和`-fPIC`选项,生成动态库文件(如mylib.so)。其中,`-fPIC`表示编译生成位置无关代码(Position Independent Code),这是创建可共享库的必要条件。 共享库和动态链接是操作系统中提高资源利用率和程序灵活性的重要机制,它们解决了静态链接带来的问题,并为软件开发和维护提供了便利。
2014-11-10 上传
找了很久,,资源都是分开的 这次我把他汇总,打包,方便下载了 不用一个一个的找了下了 很多使用安卓的朋友应该都遇到过安装某些软件出现”应用未安装“,用电脑手机助手进行安装时会出现没有该软件的共享库或已失效,这个问题大概困扰了我3天时间,终于在我的坚持下找到了解决方法,希望出现过这样问题的朋友严格安装我下面的步骤操作即可解决以上问题! 第一步:使用第三方工具中的ROOT获取工具,进行获取ROOT权限。 第二步:下载ROOT EXPLORER 具有最高权限的文件管理工具,安装并打开(打开时出现是否允许此软件使用最高权限,允许)。 第三步:下载以下三个文件。 com.google.android.maps.jar com.google.android.maps.xml NetworkLocation.apk 第四步:使用ROOT EXPLORER 文件工具将三个文件以下面的说明操作。 com.google.android.maps.jar 拷贝到根目录的 system/framework/ 文件夹下面。 然后将此文件的权限设为 root 权限,然后在设置访问权限对话框上选项上对话框选项有9个可打钩的方格,把左边三个的全部勾选,中间的三个的第一个勾上即可。 com.google.android.maps.xml 拷贝到根目录的 system/etc/permissions/ 文件夹下面。 同上面的设置权限的方法一样。 NetworkLocation.apk 拷贝到根目录的 data/app_s/ 文件夹下面。 (如果找不到 app_s这个文件夹,可以新建一个 app_s文件夹,然后在将其拷贝进去)!将此文件的权限设置为 system 然后在设置访问权限对话框上选项上对话框选项有9个可打钩的方格,将左边三个全部勾上,中间的第一个和第二个勾上,右边全部勾上即可。然后重启手机,开始安装你以前安装失败的软件,然后你就会看到安装成功的兴奋了。这样你就永远不会在遇到软件未安装或没有该软件的共享库或已失效的情况了。