[发明专利]一种基于符号动态重定向的多编译器混合链接方法有效
| 申请号: | 202310926311.X | 申请日: | 2023-07-26 |
| 公开(公告)号: | CN116661779B | 公开(公告)日: | 2023-09-19 |
| 发明(设计)人: | 温研;杜凯 | 申请(专利权)人: | 北京麟卓信息科技有限公司 |
| 主分类号: | G06F8/36 | 分类号: | G06F8/36;G06F8/41;G06F9/445;G06F9/448 |
| 代理公司: | 暂无信息 | 代理人: | 暂无信息 |
| 地址: | 100085 北京市海淀区西*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 符号 动态 定向 编译器 混合 链接 方法 | ||
本发明公开了一种基于符号动态重定向的多编译器混合链接方法,通过基于构建的编译器与其符号还原功能间的映射关系得到错误符号在源代码中的函数名或变量名,同时获取当前使用的所有链接库中符号在源代码中的函数名或变量名构成库源名称表,通过与库源名称表比对确定错误符号对应的符号,再通过构造封装库完成错误符号的代理及导出,从而解决了由编译器名称修饰规则差异所导致的程序编译时符号不匹配问题。
技术领域
本发明属于计算机应用开发技术领域,具体涉及一种基于符号动态重定向的多编译器混合链接方法。
背景技术
在某些编程语言中函数重载或方法重载主要用于创建多个具有不同实现的同名函数。调用重载函数时将运行适合于调用上下文的该函数的特定实现,换句话说,调用重载函数能够实现根据上下文执行不同的任务。
在编译器构造中名称修饰(Name Mangling)用于解决为编程实体解析唯一名称而引起的各种问题,它提供了一种以函数、结构、类或其他数据类型的名称对附加信息进行编码的方法,以便将更多语义信息从编译器传递至链接器(Linker)。但是,不同编译器,甚至同一编译器的不同版本,其名称修饰规则并不相同,也就是说同一函数经不同编译器编译后的名称往往会存在较大差异,这将导致由某个编译器生成的动态库或静态库无法被其他编译器识别,也就无法被在编译程序源码后链接时使用。例如,由GCC编译动态库或静态库libA,libA实现并导出了函数fun,GCC将函数fun名称修饰后导出的符号是funX,然而若用户编写程序A使用函数fun并采用clang编译器执行编译时,由于按照clang的名称修饰规则其将函数fun名称修饰为funY,此时就会导致程序A链接失败。
综上所述,现有编译框架存在由不同编译器或同一编译器的不同版本间名称修饰规则差异所导致的程序编译时符号不匹配的问题。
发明内容
有鉴于此,本发明提供了一种基于符号动态重定向的多编译器混合链接方法,实现了符号在多编译器下的混合链接。
本发明提供的一种基于符号动态重定向的多编译器混合链接方法,包括以下步骤:
步骤1、提取不同编译器及同一编译器的不同版本的符号还原功能,将符号还原功能封装为API接口记为符号还原API,建立编译器与符号还原API间的映射关系记为编译器还原映射;
步骤2、若第一编译器编译目标程序执行链接操作产生无法解析符号错误,则将当前错误符号加入错误符号列表,根据链接顺序依次将当前链接操作相关的链接库加入链接库列表;否则,若目标程序已全部完成编译链接则结束本流程,若目标程序未全部完成编译链接则执行步骤2;
步骤3、在编译器还原映射中查找第一编译器对应的符号还原API记为第一符号还原API,采用第一符号还原API对当前错误符号执行符号还原操作得到其在源代码中的函数名或变量名记为第一源名称;
步骤4、将生成链接库列表中链接库的编译器的名称记为第二编译器,在编译器还原映射中查找第二编译器对应的符号还原API记为第二符号还原API;采用第二符号还原API对链接库的所有符号执行符号还原操作得到其在源代码中的函数名或变量名,将这些函数名或变量名加入库源名称表;
步骤5、若库源名称表中存在与第一源名称相同的名称,则将与第一源名称相匹配的符号在其对应的链接库中的符号记为第一库符号,与其对应的链接库记为第一链接库;建立第一封装库封装第一代理的源代码,第一代理为名称与第一源名称相同的当前错误符号的代理函数或代理变量,将第一代理的标识设置为已导出;若不存在,则结束本流程;
步骤6、在第一封装库中加入初始化函数记为封装初始化函数,再将封装初始化函数加入目标程序的初始化函数列表,使目标程序执行时即可调用封装初始化函数;封装初始化函数用于处理当前错误符号为变量时的数据访问异常,当产生异常时获取第一代理的内存地址作为新的指令地址执行后续操作;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京麟卓信息科技有限公司,未经北京麟卓信息科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202310926311.X/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种播种组件及播种器
- 下一篇:一种汽轮机叶轮振动性能测试装置





