一种实现动态链接库的方法和装置的制作方法

文档序号:6618779阅读:126来源:国知局
专利名称:一种实现动态链接库的方法和装置的制作方法
技术领域
本发明涉及通信领域,特别涉及一种实现动态链4妄库的方法和装置。
背景技术
MTK平台由于其低廉的价格较高的完工率做为目前最流行的终端解决方 案广泛应用于各个终端品牌。但由于其软件平台不支持应用的动态加载和在线 更新,导致MTK平台终端应用部署只能在生产时烧录到终端的ROM(Read-Only Memory,只读存储器)芯片中。而残酷的终端竟争佳:得厂商不断压缩生产成本, ROM芯片空间也越来越小,制约了终端应用的表现和内容,成为终端应用开发 的第一大瓶颈。现有技术中通过动态加载中间件平台,当运行应用时将应用文 件从文件系统加载到RAM(random access memory ,随机存储器)内存空间中,解 决了应用只能存放在ROM空间的问题,从而解决ROM空间紧张和应用丰富表 现和内容之前的矛盾。中间件平台支持将整个应用包下载进行更新。
但是不管是把应用放在ROM空间还是RAM空间大小都是有限的,当存在 多个应用时,动态加载中间件平台在多应用加载时,内存空间可能存储不下多 应用所占用的空间。

发明内容
为了实现多应用同时加载时,多应用的大小和内存空间不产生沖突,本发 明实施例提供了 一种实现动态链接库的方法和装置。所述4支术方案如下 一种实现动态链接库的方法,所述方法包括 加载动态链接库文件;
获取所述动态链接库文件对外部其他应用提供的服务的接口地址;
释放所述动态链接库文件。所述加载动态链接库文件,具体包括
接收加载所述动态链"f妄库文件的请求;
根据接收的加载请求判断所述动态链接库文件是否已经加载;
如果已经加载,则将所述动态链接库文件对应的句柄中计数器值加1,并执 行接收加载所述动态链接库文件的请求的步骤;
否则,根据所述动态链接库文件名进行加载,如果加载成功,为所述动态链 接库文件分配空闲句柄,并在所述分配的句柄中保存所述动态链接库文件信息, 将所述计数器值初始化为预设值并加1,然后执行接收加载所述动态链接库文件 的请求的步骤;否则,直接执行所述接收加载所述动态链接库文件的请求的步骤。
所述动态链接库文件信息包括但不限于查询接口函数指针,动态链接库文 件名及动态链接库文件起始地址。
所述获取动态链接库文件对外部其他应用提供的服务接口地址,具体包括 接收获取所述动态链接库文件对外部其他应用提供的服务接口地址的请
求;
根据所述获取请求查询所述动态链接库文件对外部其他应用提供的服务接 口相对地址,如果查找到,将查询的所述相对地址加上所述动态链接库文件的 起始地址,作为所述动态链接库文件对外部其他应用提供的服务接口地址;否
的步骤。
所述释放动态链接库文件,具体包括 接收释放所述动态链接库文件的请求;
将所述动态链接库文件对应的句柄中计数器值减1,并判断减1后的当前计 数器值是否为预设值,如果是,则将所述动态链接库文件从内存中释放;否贝'J, 执行接收释放所述动态链接库文件的请求的步骤。
一种实现动态链接库的装置,所述装置包括加载模块,获取模块和释放 模块;
所述加载模块,用于加载动态链接库文件;
所述获取模块,用于获取所述动态链接库文件对外部其他应用提供的服务 的接口地址;
6所述释放模块,用于释放所述加载模块加载的动态链接库文件。
所述加载模块具体包括接收单元,判断单元和加载单元; 所述接收单元,用于接收加载所述动态链接库文件的请求; 所述判断单元,用于根据接收的加载请求判断所述动态链接库文件是否已
经加载,如果是,则将所述动态链接库文件对应的句柄中计数器值加1,并触发
所述接收单元;否则,触发所述加载单元;
所述加栽单元,用于收到所述判断单元的触发后,根据所述动态链接库文
件名进行加载,如果加载成功,为所述动态链"f妄库文件分配空闲句柄,并在所
述分配的句柄中保存所述动态链接库文件信息,将所述计数器值初始化为预设
值并加l,然后触发所述接收单元;否则,直接触发所述接收单元。
所述动态链接库文件信息包括但不限于查询接口函数指针,动态链接库
文件名及动态链接库文件起始地址。
所述获^f莫块具体包括接收单元,查询单元和计算单元; 所述接收单元,用于接收获取所述动态链接库文件对外部其他应用提供的
服务接口地址的请求;
所述查询单元,用于根据所述获取请求查询所述动态链接库文件对外部其
他应用提供的服务接口相对地址,如果查找到,则触发所述计算单元;否则,
触发所述接收单元;
所述计算单元,用于收到所述查询单元的触发后,将所述查询单元查询的
所述相对地址加上所述动态链接库文件的起始地址,作为所述动态链接库文件
对外部其他应用提供的服务接口地址。
所述释放模块具体包括接收单元,判断单元和释放单元; 所述接收单元,用于接收释放所述动态链接库文件的请求; 所述判断单元,用于将所述动态链接库文件对应的句柄中计数器值减1,并
判断减l后的当前计数器值是否为预设值,如果是,触发所述释^:单元;否贝'J,
触发所述接收单元;
所述释放单元,用于收到所述判断单元的触发后,将所述动态链接库文件
从内存中释放。
本发明实施例的有益效果是通过加载动态链接库文件,在使用完后进行 卸载,可以实现多应用同时加载,而且动态链接库使得应用包占用空间更小,更新方便和省流量,同时也4吏应用开发更快捷。


图l是本发明实施例l提供的实现动态链接库的方法流程示意图; 图2是本发明实施例1提供的加载动态链接库文件的过程示意图; 图3是本发明实施例1提供的获取动态链接库文件对外部其他应用提供的 服务接口地址的过程示意图4是本发明实施例1提供的释放动态链接库文件的过程示意图; 图5是本发明实施例2提供的实现动态链接库的装置结构示意图。
具体实施例方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明 实施方式作进一步地详细描述。 实施例l
参见图1,本发明实施例提供了一种实现动态链接库的方法,该方法包括 步骤101:加载动态链接库文件;
步骤102:获取动态链接库文件对外部其他应用提供的服务接口地址; 步骤103:释》t动态链接库文件。
在本实施例中,动态链接库文件本身无法独立运行,动态链接库文件主要 负责对外部其他应用提供某些特定服务,具体来说就是提供一些函数。动态链 接库文件头固定是一个统一格式的查询接口 ,这个接口接收函数名并返回函数 名对应的函数指针。
外部其他应用是指在软件应用,本发明实施例中软件平台以MTK平台为例 进行说明,但不限于其他的软件平台。这些外部其他应用需要在动态链接库文 件提供的服务协助下完成某些特定功能。外部其他应用通过动态链接库管理器 进行动态链接库文件的加载,外部其他应用在动态链接库管理器的协助下,使 用动态链接库文件提供的服务。如果某动态链接库文件已经加载,则动态链接 库管理器内部就包含了这个动态链接库文件对应的句柄,如果有好几个动态链 接库文件已经加载,则动态链接库管理器内部就包含了各个动态链接库文件对 应的句柄形成的队列。句柄是在内存中指向某动态链接库文件的结构,句柄中保存该动态链接库文
件信息包括但不限于动态链接库文件名,动态链接库文件的查询接口函数指 针,动态连接库文件在内存中的起始地址以及计数器, 一个句柄中有一个计数器。
其中,参见图2,加栽动态链接库文件,具体包括 步骤201:接收加载动态链接库文件的请求;
步骤202:根据接收的加载请求中的动态链接库文件名判断该动态链接库文 件是否已经加载,如果已经加载,执行步骤203;否则,执行步骤204;
步骤203:将该句柄对应的计数器值加1,并返回步骤201;
步骤204:根据接收的加载请求中的动态链接库文件名进行加载,并判断是 否加载成功,如果否,返回步骤201;如果是,为该动态链接库文件分配空闲句 柄,并在该分配的句柄中保存该动态链接库文件信息,将计数器值初始化为预 设值并加l,执行步骤201;该信息包括但不限于查询4妄口函数指针,动态链 接库文件名及动态链接库文件在内存中的起始地址。
其中,将内存地址转换为动态链接库文件查询接口函数指针。
因为动态链接库文件可以同时为几个外部其他应用提供服务,所以需要计 数器来记录动态链接库文件当前共为几个外部其他应用提供服务。
例如,计数器值开始为5,预设值为O,当判断为动态链接库文件已经加栽 时,计数器值在5基础上加1,即此时计数器值为6,然后返回步骤201,再次 接收加载动态链接库文件的请求。
当加载动态链接库文件后,判断已经加载成功时,将计数器值从5设置为 预设值O,然后计数器值再加1,即此时计数器值为1,然后返回步骤201,再 次接收加载动态链接库文件的请求。
具体的,加载动态链接库文件过程中,动态链接库管理器接收加载动态链 接库文件的请求,并判断动态链接库文件是否已经加载,在没有加载时,根据 外部其他应用提供的动态连接库文件名进行加载。
其中,参见图3,获取动态链接库文件对外部其他应用提供的服务接口地址, 具体包括
步骤301:接收获取动态链接库文件对外部其他应用提供的服务接口地址的 请求;步骤302:根据接收的获取请求中的函数名来查询动态链接库文件对外部其 他应用提供的服务接口相对地址,如果查找到,则执行步骤303;否则,返回步 骤301;
具体的,根据接收的获取请求中的函数名调用句柄中保存的查询函数来查 询动态链接库文件提供的服务接口相对地址。
步骤303:将查询的动态链接库文件对外部其他应用纟是供的服务接口相对地 址加上动态链接库文件的起始地址,作为动态链接库文件对外部其他应用提供 的服务接口地址。
具体的,获取动态链接库文件对外部其他应用提供的服务接口地址过程中, 动态链接库管理器接收获取动态链接库文件对外部其他应用提供的服务接口地 址的请求,并协助外部其他应用查询动态链接库文件对外部其他应用提供的月良 务4妄口地址。
其中,参见图4,释放动态链接库文件,具体包括 步骤401:接收释放动态链接库文件的请求;
步骤402:将对应句柄的计数器值减1,并判断减l后的当前计数器值是否 为预设值,如果是,执行步骤403;否则,返回步骤401;
步骤403:将接收的释放请求中的动态链接库文件从内存中释放,并将对应 句柄从队列中移除。
具体的,外部其他应用使用完动态链接库文件后,动态链接库管理器将该 动态链接库文件从内存中释放掉。
如果计数器为0,也就是说没有外部应用在使用动态链接库时,就需要动态 链接库管理器从内存中把该动态链接库文件释放掉。
例如,计数器值为6,收到释放动态链接库文件的请求时,将计数器值减1, 即当前计数器值成为5, 5不是计数器值的预设值,因此返回步骤401,再次接 收释放动态链接库文件的请求;直到计数器值为预设值O时,执行步骤403。
本发明实施例的有益效果是通过加载动态链接库文件,在使用完后进行 卸载,可以实现多个外部其他应用同时加载动态链接库文件,而且动态链接库 文件使得外部其他应用包占用空间更小,更新方便和节省流量,同时也使外部 其他应用开发更快捷。
10实施例2
参见图5,本发明实施例提供了一种实现动态链接库的装置,该装置包括 加载模块501,获^^莫块502和释放模块503;
其中,加载模块501,用于加载动态链接库文件;
获取模块502,用于获取动态链接库文件对外部其他应用提供的服务接口地
址;
释放模块503,用于释放加载模块501加载的动态链接库文件。
在本实施例中,动态链接库文件本身无法独立运行,动态链接库文件主要 负责对外部其他应用提供某些特定服务,具体来说就是提供一些函数。动态链 接库文件头固定是一个统一格式的查询接口 ,这个接口接收函数名并返回函数 名对应的函数指针。
外部其他应用是指在软件应用,本发明实施例中软件平台以MTK平台为例 进行说明,但不限于其他的软件平台。这些外部其他应用需要在动态链接库文 件提供的服务协助下完成某些特定功能。外部其他应用通过动态链接库管理器 进行动态链接库文件的加载,外部其他应用在动态链接库管理器的协助下,使 用动态链接库文件提供的服务。如果某动态链接库文件已经加载,则动态链接 库管理器内部就包含了这个动态链接库文件对应的句柄,如果有好几个动态链 接库文件已经加载,则动态链接库管理器内部就包含了各个动态链接库文件对 应的句柄形成的队列。
句柄是在内存中指向某动态链接库文件的结构,句柄中保存该动态链接库文 件信息包括但不限于动态链接库文件名,动态链接库文件的查询接口函数指 针,动态连接库文件在内存中的起始地址以及计数器, 一个句柄中有一个计数 器。
其中,加载模块501,具体包括
接收单元,用于接收加载动态链接库文件的请求;
判断单元,用于根据接收的加载请求中的动态链接库文件名判断该动态链 接库文件是否已经加载,如果已经加载,则将计数器值加l,并触发接收单元; 否则,触发加载单元;
加载单元,用于收到判断单元的触发后,根据接收单元接收的加载请求中 的动态链接库文件名进行加载,并判断是否加载成功,如果否,直接触发接收单元;如果加载成功,为该动态链4妄库文件分配空闲句柄,并在该分配的句柄 中保存该动态链接库文件信息,将计数器值初始化为预设值并加1,并触发接收 单元;该信息包括但不限于查询接口函数指针,动态链接库文件名及动态链 接库文件在内存中的起始地址。
其中,将内存地址转换为动态链接库文件查询接口函数指针。
数器来记录动态链接库文件当前共为几个外部其他应用提供服务。
例如,计数器值开始为5,预设值为O,当判断为动态链接库文件已经加载 时,计数器值在5基础上加1,即此时计数器值为6,然后返回步骤201,再次 接收加载动态链接库文件的请求。
当加载动态链接库文件后,判断已经加载成功时,将计数器值从5设置为 预设值O,然后计数器值再加1,即此时计数器值为1,然后返回步骤201,再 次接收加载动态链接库文件的请求。
具体的,加载动态链接库文件过程中,动态链接库管理器接收加载动态链 接库文件的请求,并判断动态链接库文件是否已经加载,在没有加载时,根据 外部其他应用提供的动态连接库文件名进行加载。
其中,获取模块502,具体包括
接收单元,用于接收获取动态链接库文件对外部其他应用提供的服务接口 地址的请求;
查询单元,用于根据接收的获取请求中的函数名来查询动态链接库文件对 外部其他应用提供的服务接口相对地址,如果查找到,则触发计算单元;否则, 触发接收单元;
具体的,根据接收的获取请求中的函数名调用句柄中保存的查询函数来查 询动态链接库文件提供的服务接口相对地址。
计算单元,用于收到查询单元的触发后,将查询的动态链接库文件对外部 其他应用提供的服务接口相对地址加上动态链接库文件的起始地址,作为动态 链接库文件对外部其他应用提供的服务接口地址。
具体的,获取动态链接库文件对外部其他应用提供的服务接口地址过程中, 动态链接库管理器接收获取动态链接库文件对外部其他应用提供的服务接口地 址的请求,并协助外部其他应用查询动态链接库文件对外部其他应用提供的服务接口地址。
其中,释放模块503,具体包括
接收单元,用于接收释放动态链接库文件的请求;
判断单元,用于将对应句柄的计数器值减1,并判断减1后的当前计数器值 是否为预设值,如果是,触发释^L单元;否则,触发4^收单元;
释放单元,用于收到判断单元的触发后,将动态链接库文件从内存中释放,
并将对应句柄从队列中移除。
具体的,外部其他应用使用完动态链接库文件后,动态链接库管理器将该
动态链接库文件从内存中释放掉。
如果计数器为O,也就是说没有外部应用在使用动态链接库时,就需要动态 链接库管理器从内存中把该动态链接库文件释放掉。
例如,计数器值为6,接收单元收到释放动态链接库文件的请求时,判断单 元将计数器值减l,即当前计数器值成为5, 5不是计数器值的预设值,因此触 发接收单元;直到计数器值为预设值O时,触发释放单元。
本发明实施例的有益效果是通过加载动态链接库文件,在使用完后进行 卸载,可以实现多个外部其他应用同时加载动态链4矣库文件,而且动态链接库 文件使得外部其他应用包占用空间更小,更新方便和节省流量,同时也使外部 其他应用开发更快捷。
以上所述仅为本发明的较佳实施例,并不用以限制 发明,凡在本发明的 精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的 保护范围之内。
权利要求
1.一种实现动态链接库的方法,其特征在于,所述方法包括加载动态链接库文件;获取所述动态链接库文件对外部其他应用提供的服务的接口地址;释放所述动态链接库文件。
2. 根据权利要求1所述的方法,其特征在于,所述加载动态链接库文件, 具体包括接收加载所述动态链接库文件的请求;根据接收的加载请求判断所述动态链接库文件是否已经加载; 如果已经加载,则将所述动态链接库文件对应的句柄中计数器值加1,并执 行接收加载所述动态链接库文件的请求的步骤;否则,根据所述动态链接库文件名进行加载,如果加载成功,为所述动态链 接库文件分配空闲句柄,并在所述分配的句柄中保存所述动态链接库文件信息, 将所述计数器值初始化为预设值并加1,然后执行接收加载所述动态链接库文件 的请求的步骤;否则,直接执行所述接收加载所述动态链接库文件的请求的步 骤。
3. 根据权利要求2所述的方法,其特征在于,所述动态链接库文件信息包 括但不限于查询接口函数指针,动态链接库文件名及动态链接库文件起始地址。
4. 根据权利要求1或3所述的方法,其特征在于,所述获取动态链接库文 件对外部其他应用提供的服务接口地址,具体包括求;根据所述获取请求查询所述动态链接库文件对外部其他应用提供的服务接 口相对地址,如果查找到,将查询的所述相对地址加上所述动态链接库文件的 起始地址,作为所述动态链接库文件对外部其他应用提供的服务接口地址;否 则,执行接收获取动态链接库文件对外部其他应用提供的服务接口地址的请求 的步骤。
5.根据权利要求1所述的方法,其特征在于,所述释放动态链接库文件,具体包括接收释放所述动态链接库文件的请求;将所述动态链接库文件对应的句柄中计数器值减1,并判断减1后的当前计 数器值是否为预设值,如果是,则将所述动态链接库文件从内存中释放;否则, 执行接收释放所述动态链接库文件的请求的步骤。
6. —种实现动态链接库的装置,其特征在于,所述装置包括加载模块, 获取纟莫块和释^:模块;所述加载模块,用于加载动态链接库文件;所述获取模块,用于获取所述动态链接库文件对外部其他应用提供的服务 的接口地址;所述释放模块,用于释放所述加载模块加载的动态链接库文件。
7. 根据权利要求6所述的装置,其特征在于,所述加栽模块具体包括接 收单元,判断单元和加载单元;所述接收单元,用于接收加载所述动态链接库文件的请求; 所述判断单元,用于根据接收的加载请求判断所述动态链接库文件是否已 经加载,如果是,则将所述动态链接库文件对应的句柄中计ft器值加1,并触发 所述接收单元;否则,触发所述加载单元;所述加载单元,用于收到所述判断单元的触发后,根据所述动态链接库文 件名进行加栽,如果加载成功,为所述动态链接库文件分配空闲句柄,并在所 述分配的句柄中保存所述动态链接库文件信息,将所述计数器值初始化为预设 值并加l,然后触发所述接收单元;否则,直接触发所述接收单元。
8. 根据权利要求7所述的装置,其特征在于,所述动态链接库文件信息包 括但不限于查询接口函数指针,动态链接库文件名及动态链接库文件起始地 址。
9. 根据权利要求6或8所述的装置,其特征在于,所述获取模块具体包括 接收单元,查询单元和计算单元;所述接收单元,用于接收获取所述动态链接库文件对外部其他应用提供的 服务接口地址的请求;所述查询单元,用于根据所述获取请求查询所述动态链接库文件对外部其 他应用提供的服务接口相对地址,如果查找到,则触发所述计算单元;否则,触发所述接收单元;所述计算单元,用于收到所述查询单元的触发后,将所述查询单元查询的所述相对地址加上所述动态链接库文件的起始地址,作为所述动态链接库文件 对外部其他应用提供的服务接口地址。
10.根据权利要求6所述的装置,其特征在于,所述释放模块具体包括 接收单元,判断单元和释放单元;所述接收单元,用于接收释放所述动态链接库文件的请求;所述判断单元,用于将所述动态链接库文件对应的句柄中计数器值减1,并 判断减l后的当前计数器值是否为预设值,如果是,触发所述释》文单元;否则, 触发所述接收单元;所述释放单元,用于收到所述判断单元的触发后,将所述动态链接库文件 从内存中释放。
全文摘要
本发明实施例公开了一种实现动态链接库的方法和装置,属于通信领域。所述方法包括加载动态链接库文件;获取所述动态链接库文件对外部其他应用提供的服务的接口地址;释放所述动态链接库文件。所述装置包括加载模块,获取模块和释放模块。本发明实施例的有益效果是通过加载动态链接库文件,在使用完后进行卸载,可以实现多个外部其他应用同时加载动态链接库文件,而且动态链接库文件使得外部其他应用包占用空间更小,更新方便和节省流量,同时也使外部其他应用开发更快捷。
文档编号G06F9/445GK101561763SQ200910083419
公开日2009年10月21日 申请日期2009年4月30日 优先权日2009年4月30日
发明者佳 古, 吴志华, 璇 邱, 邱会发 申请人:腾讯科技(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1