[发明专利]一种跨平台的ABI兼容C++组件框架的实现方法有效
申请号: | 202010961266.8 | 申请日: | 2020-09-14 |
公开(公告)号: | CN112148283B | 公开(公告)日: | 2023-09-22 |
发明(设计)人: | 张铭雨;叶雨桐 | 申请(专利权)人: | 第六镜科技(成都)有限公司 |
主分类号: | G06F8/36 | 分类号: | G06F8/36;G06F8/41 |
代理公司: | 北京华清迪源知识产权代理有限公司 11577 | 代理人: | 杜立军 |
地址: | 610093 四川省成都市中国(四川*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 平台 abi 兼容 c++ 组件 框架 实现 方法 | ||
本申请实施例提供一种跨平台的ABI兼容C++组件框架的实现方法,该方法提出采用现代C++实现的跨平台(即与操作系统无关)的ABI兼容组件框架。该ABI兼容组件框架采用布局稳定的ABI接口类型为基础,构建专有类型系统,然后构建该专有系统中的ABI接口类型与实现函数之间的对应关系,根据该对应关系,操作系统中的编译器在对C++程序进行编译时根据该对应关系调用ABI接口类型的函数。ABI接口类型具有稳定性,使用期构建底层系统,再将其与C++程序中的函数相关联,使得在不同版本的编译器生成的可执行文件中的布局是不变的,也即他们是兼容的。
技术领域
本发明实施例涉及计算机技术领域,具体涉及一种跨平台的ABI兼容C++组件框架的实现方法。
背景技术
C++的ABI(Application Binary Interface——C++应用程序二进制接口)定义了C++语言和操作系统间调用的低级别接口规范。它描述了一个数据类型的内存布局、导出符号和调用约定。ABI兼容指的是,两种不同版本的C++编译器编译同样的代码,生成的可执行文件互相兼容,可以被第三方正确调用而无需以第三方的配置环境重新编译源代码。由于各大厂商提供的C++标准库实现几乎不兼容,导致不同厂商、不同版本的C++编译器编译同样代码生成的可执行文件ABI不兼容。这成为业内饱受诟病的问题。
针对这个问题,目前各大主流操作系统有自己的解决方案。一是windows操作系统,微软公司在windows操作系统内提供了一个兼容的包装层--COM(Component ObjectModel,组件对象模型),这是一个针对C++语言的兼容性框架,若遵守该框架的协定编写C++程序则编译出的可执行文件在Windows操作系统下是ABI兼容的,无需担心不同版本的编译器的兼容性问题;二是GNU/Linux操作系统,GNU的GCC编译器及LLVM的clang编译器,遵守Itaninum ABI规范。它在一定的编译器大版本范围内,保持了C++标准库的ABI稳定性,这样也在一定程度上解决了ABI兼容性的问题。
但是,上述两种方式还存在如下问题:一是复杂性较高,Windows为了规避ABI兼容性问题,要求用户必须使用复杂的COM框架,这样就无法使用标准的C++类型作为对外接口,丧失了C++语言的部分功能。二是非跨平台,现有方案在Windows操作系统等主流系统采用各自的平台相关方案,导致同一个类库在不同操作系统需分别编写对外接口,增加了一倍的工作量。三是操作系统耦合性强,现有方案在Windows操作系统必须大量使用Windows系统API,很难利用纯C++语言实现全部功能,不利于开源项目及跨平台项目的研发。
发明内容
为此,本发明实施例提供一种跨平台的ABI兼容C++组件框架的实现方法,该方法提出采用现代C++实现的跨平台(即与操作系统无关)的ABI兼容组件框架。该ABI兼容组件框架采用布局稳定的ABI接口类型为基础,构建专有类型系统,然后构建该专有系统中的ABI接口类型与实现函数之间的对应关系,根据该对应关系,操作系统中的编译器在对C++程序进行编译时根据该对应关系调用ABI接口类型的函数。ABI接口类型具有稳定性,使用期构建底层系统,再将其与C++程序中的函数相关联,使得在不同版本的编译器生成的可执行文件中的布局是不变的,也即他们是兼容的。其具体技术方案如下:
根据本发明实施例提供的一种跨平台的ABI兼容C++组件框架的实现方法,包括步骤:
以泛型ABI接口类型为基础,构建底层专有ABI接口类型系统;其中,所述ABI接口类型包括纯虚函数,所述纯虚函数的参数均为基本类型;
将所述ABI接口类型系统中ABI接口类型的函数与C++程序对应实现类型中成员函数进行静态绑定;
调用C++程序对应实现类型中相应函数时,通过所述静态绑定的关系,导出所述ABI接口类型。
进一步的,所述底层专有ABI接口类型系统的构建包括步骤:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于第六镜科技(成都)有限公司,未经第六镜科技(成都)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010961266.8/2.html,转载请声明来源钻瓜专利网。