一种编译多CPU架构软件与功能库的方法与流程

未命名 07-14 阅读:117 评论:0

一种编译多cpu架构软件与功能库的方法
技术领域
1.本发明涉及计算机技术领域,具体为一种编译多cpu架构软件与功能库的方法。


背景技术:

2.随着cpu技术不断发展更新的迭代,当前市场上出现了形形色色具有不同指令集架构的cpu,服务于不同的行业。例如国内信创产业中,服务于政府部门的国产化cpu就包含有x86-64,aarch64,以及mipse64等多种架构。由于各种不同架构cpu指令集互不兼容,所以为不同cpu编译的软件和库文件无法通用,这为软件适配带来了诸多的问题。
3.针对多cpu架构编译的问题,于是产业内提出交叉编译方式来解决上述问题。所谓交叉编译,即在一些通用cpu(一般是x86-64)上运行编译链工具,该工具可以将当前的源码编译成在另一种cpu架构可执行的程序。
4.例如,在现有技术cn109491661a通用交叉编译方法及设备中提出从待编译安装包中获取依赖包,对所述待编译安装包中的依赖包之间的依赖关系进行排序,得到已排序的待编译安装包;将所述排序后的待编译安装包与交叉编译工具链结合,得到通用交叉编译框架;其中,所述通用交叉编译框架用于对程序代码进行编译,所述依赖包中包含待编译软件。
5.但是编译基于linux/unix平台大型软件时,需要依赖更多的功能库(更多时候这种依赖关系是一级依赖下一级,一层一层依赖下去的)以及os系统提供的功能库,就需要一个交叉编译集成环境。在该环境中可运行用户配置相关内核参数,库包版本等。而后将待编译的目标源代码工程的makefile文件添加到上述工程中进行联合编译,最终生成我们需要可执行文件,然后再进行安装打包,而后输出。
6.然而上述方案存在以下问题:1.配置的专业性要求较高,对国产化发行版支持不佳,编译调试周期长需要了解每个库的依赖关系的同时还需要处理不同库版本之间差异导致的问题,手工的方式来消弭因库版本冲突导致的编译问题。同时由于多数国产化os发行版没有提供类似的交叉编译集成环境,所以难以配置出国产化os发行版相同或类似的环境进行编译。往往导致编译出可执行文件在放到目标操作系统平台上进行运行时需要较长时间进行依赖库相关的定位和调试过程。2.难以分发部署以及存储备份。3.容易收到主机环境的影响。


技术实现要素:

7.为了解决上述现有技术中存在的问题,本发明提出了一种编译多cpu架构软件与功能库的方法。
8.本发明的技术方案如下:
9.一方面,本发明提出一种编译多cpu架构软件与功能库的方法,具体步骤包括:
10.通过应用容器引擎在主操作系统后台建立多种cpu架构的基础镜像,并运行各基础镜像生成对应的执行容器;
11.通过binfmt向主操作系统内核注册各种cpu架构镜像二进制文件的解析引擎;
12.在各执行容器内部配置编译环境,并验证所述编译环境的有效性;
13.利用目标cpu架构的执行容器编译源代码,并输出对应目标cpu架构的可执行文件。
14.作为优选实施方式,所述通过binfmt向主操作系统内核注册各种cpu架构镜像二进制文件的解析引擎的具体方法为:
15.通过binfmt将不同cpu架构二进制文件的魔数与其对应cpu架构的指令解析引擎进行绑定。
16.作为优选实施方式,所述各执行容器同时长期独立运行于主操作系统后台中,且使用时通过命令的方式附着并进入对应执行容器的命令控制台进行代码的编译和开发。
17.作为优选实施方式,所述编译环境可以进行预先配置,具体方法为:
18.通过应用容器引擎的内置工具将当前可用的容器版本进行二进制方式压缩及备份,并导出一个压缩包;接着在另一台具有相同应用容器引擎环境且注册完成各种cpu架构镜像二进制文件的解析引擎的主机上加载上述压缩包,即可完整部署一套相同的编译环境。
19.另一方面,本发明提出一种编译多cpu架构软件与功能库的系统,其特征在于,包括:
20.镜像容器生成模块:通过应用容器引擎在主操作系统后台建立多种cpu架构的基础镜像,并运行各基础镜像生成对应的执行容器;
21.二进制文件解析模块:通过binfmt向主操作系统内核注册各种cpu架构镜像二进制文件的解析引擎;
22.编译环境配置模块:在各执行容器内部配置编译环境,并验证所述编译环境的有效性;
23.输出模块:利用目标cpu架构的执行容器编译源代码,并输出对应目标cpu架构的可执行文件。
24.作为优选实施方式,所述通过binfmt向主操作系统内核注册各种cpu架构镜像二进制文件的解析引擎的具体方法为:
25.通过binfmt将不同cpu架构二进制文件的魔数与其对应cpu架构的指令解析引擎进行绑定。
26.作为优选实施方式,所述各执行容器同时长期独立运行于主操作系统后台中,且使用时通过命令的方式附着并进入对应执行容器的命令控制台进行代码的编译和开发。
27.作为优选实施方式,所述编译环境可以进行预先配置,具体方法为:
28.通过应用容器引擎的内置工具将当前可用的容器版本进行二进制方式压缩及备份,并导出一个压缩包;接着在另一台具有相同应用容器引擎环境且注册完成各种cpu架构镜像二进制文件的解析引擎的主机上加载上述压缩包,即可完整部署一套相同的编译环境。
29.另一方面,本发明提出一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现本发明任一实施例所述的一种编译多cpu架构软件与功能库的方法。
30.另一方面,本发明提出一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明任一实施例所述的一种编译多cpu架构软件与功能库的方法。
31.本发明具有如下有益效果:
32.1、本发明通过应用容器引擎构建出不同cpu架构的镜像容器,并通过binfmt向内核注册各cpu架构镜像容器对应的二进制文件解析引擎,实现将对应的cpu架构指令翻译成主机平台上的cpu指令,并完成编译输出对应cpu架构的可执行文件。
33.2、本发明的各cpu架构对应的镜像容器都是独立运行的,多个编译工程可以同时进行互不干扰,提升了效率。同时编译出现问题时,可以通过出现的问题排查定位编译出错所在的部分。
34.3、本发明的所有镜像容器都是独立的个体,与主机环境互相隔离,不会互相影响。
35.4、本发明通过预配置的方式实现了编译环境的复制,可以将国产化os发行版中未提供的编译集成环境直接复制到容器中去完成编译环境的配置。
附图说明
36.图1为本发明流程图;
37.图2为本实施例的方案架构图。
具体实施方式
38.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
39.应当理解,文中所使用的步骤编号仅是为了方便描述,不对作为对步骤执行先后顺序的限定。
40.应当理解,在本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
41.术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
42.术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
43.实施例一:
44.参见图1,一种编译多cpu架构软件与功能库的方法,具体步骤包括:
45.通过应用容器引擎在主操作系统后台建立多种cpu架构的基础镜像,并运行各基础镜像生成对应的执行容器;
46.具体实施时,本实施例的应用容器引擎采用的是docker。
47.通过binfmt向主操作系统内核注册各种cpu架构镜像二进制文件的解析引擎;
48.具体实施时,binfmt为主操作系统内核的一项自带功能,它可以绑定拥有特定扩展名的文件,使用特定的程序打开。在注册完成后各容器内即可完成将cpu架构指令翻译成
主机平台上的cpu指令的过程。
49.在各执行容器内部配置编译环境,并验证所述编译环境的有效性;
50.具体实施时,将容器输出的可执行文件放到对应的cpu架构主机上试运行即可完成编译环境有效性的验证。
51.利用目标cpu架构的执行容器编译源代码,并输出对应目标cpu架构的可执行文件。
52.本实施例的方案架构图如图2所示。
53.作为本实施例的优选实施方式,所述通过binfmt向主操作系统内核注册各种cpu架构镜像二进制文件的解析引擎的具体方法为:
54.通过binfmt将不同cpu架构二进制文件的魔数与其对应cpu架构的指令解析引擎进行绑定。
55.具体实施时,所述魔数用于指示二进制文件的类型,一般存放于二进制文件的文件头部。
56.当相应cpu架构的二进制镜像被linux内核加载并执行时,就会根据该文件上的魔数找到对应的解析引擎进行解析执行。
57.例如,我们在x86-64 cpu的主机上就可以运行aarch64架构的可执行程序或者docker镜像文件。
58.作为本实施例的优选实施方式,所述各执行容器同时长期独立运行于主操作系统后台中,且使用时通过命令的方式附着并进入对应执行容器的命令控制台进行代码的编译和开发。
59.具体实施时,各个执行容器长期在主操作系统后台中运行,通过命令终端软件进行控制和切换,各个容器都存在一个命令控制台,进入命令控制台后可以进行代码的编译和开发。各个容器可以同时进行编译和输出可执行文件。
60.作为本实施例的优选实施方式,所述编译环境可以进行预先配置,具体方法为:
61.通过应用容器引擎的内置工具将当前可用的容器版本进行二进制方式压缩及备份,并导出一个压缩包;接着在另一台具有相同应用容器引擎环境且注册完成各种cpu架构镜像二进制文件的解析引擎的主机上加载上述压缩包,即可完整部署一套相同的编译环境。
62.具体实施时,通过上述的编译环境复制功能可以实现执行容器内部环境与目标cpu架构所需文件编译环境的统一,解决了国产化os发行版相同或类似的环境难以配置的问题。
63.实施例二:
64.一种编译多cpu架构软件与功能库的系统,包括:
65.镜像容器生成模块:通过应用容器引擎在主操作系统后台建立多种cpu架构的基础镜像,并运行各基础镜像生成对应的执行容器;
66.二进制文件解析模块:通过binfmt向主操作系统内核注册各种cpu架构镜像二进制文件的解析引擎;
67.编译环境配置模块:在各执行容器内部配置编译环境,并验证所述编译环境的有效性;
68.输出模块:利用目标cpu架构的执行容器编译源代码,并输出对应目标cpu架构的可执行文件。
69.作为本实施例的优选实施方式,所述通过binfmt向主操作系统内核注册各种cpu架构镜像二进制文件的解析引擎的具体方法为:
70.通过binfmt将不同cpu架构二进制文件的魔数与其对应cpu架构的指令解析引擎进行绑定。
71.作为本实施例的优选实施方式,所述各执行容器同时长期独立运行于主操作系统后台中,且使用时通过命令的方式附着并进入对应执行容器的命令控制台进行代码的编译和开发。
72.作为本实施例的优选实施方式,所述编译环境可以进行预先配置,具体方法为:
73.通过应用容器引擎的内置工具将当前可用的容器版本进行二进制方式压缩及备份,并导出一个压缩包;接着在另一台具有相同应用容器引擎环境且注册完成各种cpu架构镜像二进制文件的解析引擎的主机上加载上述压缩包,即可完整部署一套相同的编译环境。
74.实施例三:
75.本实施例一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现本发明任一实施例所述的一种编译多cpu架构软件与功能库的方法。
76.实施例四:
77.一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明任一实施例所述的一种编译多cpu架构软件与功能库的方法。
78.以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

技术特征:
1.一种编译多cpu架构软件与功能库的方法,其特征在于,具体步骤包括:通过应用容器引擎在主操作系统后台建立多种cpu架构的基础镜像,并运行各基础镜像生成对应的执行容器;通过binfmt向主操作系统内核注册各种cpu架构镜像二进制文件的解析引擎;在各执行容器内部配置编译环境,并验证所述编译环境的有效性;利用目标cpu架构的执行容器编译源代码,并输出对应目标cpu架构的可执行文件。2.根据权利要求1所述的一种编译多cpu架构软件与功能库的方法,其特征在于,所述通过binfmt向主操作系统内核注册各种cpu架构镜像二进制文件的解析引擎的具体方法为:通过binfmt将不同cpu架构二进制文件的魔数与其对应cpu架构的指令解析引擎进行绑定。3.根据权利要求1所述的一种编译多cpu架构软件与功能库的方法,其特征在于,所述各执行容器同时长期独立运行于主操作系统后台中,且使用时通过命令的方式附着并进入对应执行容器的命令控制台进行代码的编译和开发。4.根据权利要求1所述的一种编译多cpu架构软件与功能库的方法,其特征在于,所述编译环境可以进行预先配置,具体方法为:通过应用容器引擎的内置工具将当前可用的容器版本进行二进制方式压缩及备份,并导出一个压缩包;接着在另一台具有相同应用容器引擎环境且注册完成各种cpu架构镜像二进制文件的解析引擎的主机上加载上述压缩包,即可完整部署一套相同的编译环境。5.一种编译多cpu架构软件与功能库的系统,其特征在于,包括:镜像容器生成模块:通过应用容器引擎在主操作系统后台建立多种cpu架构的基础镜像,并运行各基础镜像生成对应的执行容器;二进制文件解析模块:通过binfmt向主操作系统内核注册各种cpu架构镜像二进制文件的解析引擎;编译环境配置模块:在各执行容器内部配置编译环境,并验证所述编译环境的有效性;输出模块:利用目标cpu架构的执行容器编译源代码,并输出对应目标cpu架构的可执行文件。6.根据权利要求5所述的一种编译多cpu架构软件与功能库的系统,其特征在于,所述通过binfmt向主操作系统内核注册各种cpu架构镜像二进制文件的解析引擎的具体方法为:通过binfmt将不同cpu架构二进制文件的魔数与其对应cpu架构的指令解析引擎进行绑定。7.根据权利要求5所述的一种编译多cpu架构软件与功能库的系统,其特征在于,所述各执行容器同时长期独立运行于主操作系统后台中,且使用时通过命令的方式附着并进入对应执行容器的命令控制台进行代码的编译和开发。8.根据权利要求5所述的一种编译多cpu架构软件与功能库的系统,其特征在于,所述编译环境可以进行预先配置,具体方法为:通过应用容器引擎的内置工具将当前可用的容器版本进行二进制方式压缩及备份,并导出一个压缩包;接着在另一台具有相同应用容器引擎环境且注册完成各种cpu架构镜像
二进制文件的解析引擎的主机上加载上述压缩包,即可完整部署一套相同的编译环境。9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至4任一权利要求所述的一种编译多cpu架构软件与功能库的方法。10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至4任一权利要求所述的一种编译多cpu架构软件与功能库的系统。

技术总结
本发明涉及一种编译多CPU架构软件与功能库的方法,具体步骤包括:通过应用容器引擎建立各种CPU架构的基础镜像,并运行各基础镜像生成对应的执行容器;通过BINFMT向主机内核注册各种CPU架构镜像二进制文件的解析引擎;在各执行容器内部配置编译环境,并验证所述编译环境的有效性;利用目标CPU架构的执行容器编译源代码,输出对应目标CPU架构的可执行文件。输出对应目标CPU架构的可执行文件。输出对应目标CPU架构的可执行文件。


技术研发人员:严彬 翁增仁 王彦宝 柯丙军
受保护的技术使用者:福建博思软件股份有限公司
技术研发日:2023.03.28
技术公布日:2023/7/13
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐