一种程序链接方法及装置制造方法及图纸

技术编号:3868444 阅读:164 留言:0更新日期:2012-04-11 18:40
本发明专利技术实施例公开了一种程序链接方法及装置,其中,所述方法包括如下步骤:通过解析第一程序和第二程序,获取所述第一程序引用所述第二程序中的第一符号,以及获取所述第一符号在所述第一程序中的第一地址和所述第一符号在第二程序中的第二地址;根据所述第一地址和所述第二地址,对所述第一符号进行重定向。通过本发明专利技术实施例程序链接方法,可以使在由多个软件子系统组成的软件系统,当其中一个或多个软件子系统升级时,其它软件子系统可以无需重新编译和升级。

【技术实现步骤摘要】

本专利技术涉及通信及计算机
,具体涉及一种程序链接方法及装置
技术介绍
在计算机、通信、IT等领域,很多硬件系统完成后都需要安装OS(Operation System,操作系统)、硬件驱动和相关应用程序等软件。这些软件最初由汇编语言或高级语 言(如C语言、Java语言等)编写而成,以源代码的形式存在,要想让其在相关硬件上运行, 还需要经过编译、链接等过程生成最终可在硬件上运行的二进制程序。 将源代码编译、链接后生成二进制程序的方法有多种,按链接方式的不同,一般采 用静态链接方式或采用静态链接结合动态链接方式。以软件系统包括0S和硬件驱动为例 来对这两种方式进行具体说明 1.静态链接方式 见图l,将OS的源代码(OSFilel. c等文件)和硬件驱动源代码(DrvFilel. c等文 件)分别编译后一起进行静态链接,生成可运行的二进制程序SRP.bin, SRP.bin可以在配 套的硬件上直接运行,并驱动所有硬件设备。 2.采用静态链接结合动态链接方式 参见图2,首先将0S核心组件的源代码(OSCore. c等文件)与核心硬件驱动源代码(DrvCore. c等文件)编译并静态链接生成可执行的二进制文件。其它OS组件源代码(0SFilel.c)和硬件驱动源代码(DrvFilel.c等文件)分别编译后生成动态链接库,在OS启动后,动态加载并链接这些动态链接库,即可使用。 专利技术人在实现本专利技术过程中,发现现有技术至少存在如下缺点 在由多个软件子系统组成的软件系统(如包括OS和驱动程序)中,当其中一个或多个软件子系统升级时,其它软件子系统需重新编译和升级,使得升级过程更加繁琐复杂。
技术实现思路
本专利技术实施例提供一种程序链接方法及装置,用于重新链接多个程序,使得在由多个软件子系统组成的软件系统,当其中一个或多个软件子系统升级时,其它软件子系统 可以无需重新编译和升级 本专利技术实施例提供一种程序链接方法,包括通过解析第一程序和第二程序,获取所述第一程序引用所述第二程序中的第一符号,以及获取所述第一符号在所述第一程序中的第一地址和所述第一符号在第二程序中的第二地址;所述第一符号包括函数和/或变 量;根据所述第一地址和所述第二地址,对所述第一符号进行重定向。 本专利技术实施例还提供了一种程序链接装置,包括解析单元用于通过解析第一程 序和第二程序,获取所述第一程序引用所述第二程序中的第一符号,以及获取所述第一符 号在所述第一程序中的第一地址和所述第一符号在第二程序中的第二地址;重定向单元, 用于根据所述第一地址和所述第二地址,对所述第一符号进行重定向。 上述技术方案中具有如下优点 在由多个软件子系统组成的软件系统,当其中一个或多个软件子系统升级时,其它软件子系统可以无需重新编译和升级。附图说明 为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为现有技术通过静态链接生成二进制程序的示意图; 图2为现有技术通过静态链接结合动态链接生成二进制程序的示意图; 图3为本专利技术实施例程序链接技术示意图; 图4为本专利技术实施例通过符号表地址查找符号表示意图; 图5为本专利技术实施例通过符号表索引地址查找符号表示意图; 图6为本专利技术实施例通过符号表特征码查找符号表示意图; 图7为本专利技术实施例对函数进行重定向示意图; 图8为本专利技术实施例程序链接装置示意图。具体实施例方式为使本专利技术的目的、技术方案及优点更加清楚明白,以下将通过具体实施例和相关附图,对本专利技术作进一步详细说明。 本专利技术实施例一提供一种程序链接方法,包括如下步骤 通过解析第一程序和第二程序,获取所述第一程序引用所述第二程序中的第一符号,以及获取所述第一符号在所述第一程序中的第一地址和所述第一符号在第二程序中的第二地址;根据所述第一地址和所述第二地址,对所述第一符号进行重定向。 通过本专利技术实施例一种程序链接方法,使得在由多个软件子系统组成的软件系统,当其中一个或多个软件子系统升级时,其它软件子系统可以无需重新编译和升级。 本专利技术实施例二提供一种程序链接方法,包括如下步骤 通过解析第一程序和第二程序,获取所述第一程序引用所述第二程序中的第一符号,以及获取所述第一符号在所述第一程序中的第一地址和所述第一符号在第二程序中的第二地址;根据所述第一地址和所述第二地址,对所述第一符号进行重定向。 其中,第一程序由第一源代码和第二虚拟源代码编译并静态链接生成,所述第二虚拟源代码为所述第一源代码提供需要引用的函数和/或变量。 获得相关符号的第一地址和第二地址的方法可以通过查找符号表来获取,符号表可以通过查找符号表地址、查找符号表索引地址和查找符号表特征码的方式获得。 获得符号的第一地址和第二地址后可以对符号进行重定向 当第一符号为函数时,查找第一程序的符号表和第二程序的符号表,找到第一程序引用第二程序的函数在第一程序和所述第二程序中的具体地址;修改第一程序中函数的第一条指令为跳转到第二程序中的函数的跳转指令; 当第一符号为变量时,修改第一程序引用第二程序中变量的指令中的变量地址为变量在所述第二程序中的地址;或者保持第一程序引用第二程序中变量的指令中的变量地址不变。 本专利技术实施例程序链接方法还可以进一步包括如下步骤 通过解析第一程序和第二程序,获取第二程序引用第一程序中的第二符号,以及获取第二符号在第一程序中的第三地址和所述第二符号在第二程序中的第四地址;根据第三地址和第四地址,对第二符号进行重定向;对第二符号进行重定向的过程与对第一符号进行重定向的过程类似。 通过本专利技术实施例,使得在由多个软件子系统组成的软件系统,当其中一个或多个软件子系统升级时,其它软件子系统可以无需重新编译和升级。 本专利技术实施例三 下面通过具体的单板系统中的程序链接方法来对本专利技术实施例三一种程序链接进行详细说明 参见图3,以软件系统的子系统包括OS和硬件驱动为例,来对本专利技术实施例进行说明 S301、将关联的操作系统源代码OSSrc. c和硬件驱动源代码Drv. c分别进行编译并静态链接生成对应的程序0S1. bin以及DRV1. bin,且生成的程序为二进制程序。 所述操作系统编译生成的0S1. bin可以存储在硬盘或者远程服务器;所述驱动软件编译生成DRV1. bin可以存储与单板内置的FLASH中。 参见图3, OSSrc. c为OS的源代码,由于OS源代码中引用了硬件驱动函数和/或变量,因此,OS源代码单独编译后是无法完成静态链接的。为了使得OS源代码编译后能够完成静态链接,可以引入一个虚拟驱动子系统(假设其源代码为virtualDrv. c),该虚拟驱动子系统提供了OS需要引用的驱动函数(可以为空函数)和/或变量。OS与虚拟驱动编译并静态链接后生成二进制程序0S1. bin,但是因为虚拟驱动并不是真实的驱动,因此,生成的二进制程序可能无法在某个具体硬件上运行。 同理,真实的硬件驱动(假设其源代码为Drv.c)因为使用了一些OS的函数和/或变量,其源代码编译后也无法独立完成静态链接,这本文档来自技高网
...

【技术保护点】
一种程序链接方法,其特征在于,包括如下步骤:通过解析第一程序和第二程序,获取所述第一程序引用所述第二程序中的第一符号,以及获取所述第一符号在所述第一程序中的第一地址和所述第一符号在第二程序中的第二地址;所述第一符号包括函数和/或变量;根据所述第一地址和所述第二地址,对所述第一符号进行重定向。

【技术特征摘要】

【专利技术属性】
技术研发人员:王伟杜开田
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:94[中国|深圳]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1