一种交叉编译方法、装置、计算设备及存储介质制造方法及图纸

技术编号:34377084 阅读:60 留言:0更新日期:2022-07-31 14:02
本发明专利技术公开了一种交叉编译方法、装置、计算设备及存储介质,该方法包括:基于第一架构的加速层、第二架构的编译环境和转换程序生成编译环境容器;获取待编译的软件包源代码并安装编译依赖包;响应于编译环境容器中发起的对软件包源代码的编译指令,由转换程序判断编译指令中的调用命令在第一架构的加速层中是否存在;当调用命令在加速层中存在,则在加速层中运行调用命令,当调用命令在加速层中不存在,则在第二架构的编译环境中运行调用命令。该方法能够提供与目标环境一致的编译运行环境,提高交叉编译的效率。提高交叉编译的效率。提高交叉编译的效率。

A cross compilation method, device, computing device and storage medium

【技术实现步骤摘要】
一种交叉编译方法、装置、计算设备及存储介质


[0001]本专利技术涉及计算机
,具体涉及一种交叉编译方法、装置、计算设备及存储介质。

技术介绍

[0002]基于ARM、RISC

V、PPC等非x86架构的精简指令集的嵌入式设备性能受限,往往不能通过本机编译得到所需软件的可执行程序。因此,以Linux为主机操作系统,搭配一个交叉编译系统,为嵌入式设备生成可执行程序已成为日益流行的编译嵌入式软件的解决方案。
[0003]交叉编译是在一个平台上生成另一个平台上的可执行代码。常见的交叉编译方案,需要在主机平台上安装对应的交叉编译工具链,然后用这个交叉编译工具链编译源代码,最终生成可在目标平台上运行的代码。但是由于每个发行版软件的包管理、软件版本及补丁均不相同,这种交叉编译方案对于系统发行版软件包构建并不适合,且常规的交叉编译方案对这种复杂环境的编译效率低,无法满足用户对编译效率的要求。
[0004]因此,需要一个能适用于复杂环境的交叉编译方案,以解决以上现有技术中存在的问题。

技术实现思路

[0005]鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的一种交叉编译方法、装置、计算设备以及存储介质。
[0006]根据本专利技术的一个方面,提供一种交叉编译方法,在该方法中,首先基于第一架构的加速层、第二架构的编译环境和转换程序生成编译环境容器,这样可以使编译环境与目标运行环境基本一致。然后获取待编译的软件包源代码并安装软件包的编译依赖包。在生成的编译容器内发起对软件包源代码的编译指令,由转换程序判断编译指令中的调用命令在第一架构的加速层中是否存在。当调用命令在加速层中存在,则在加速层中运行调用命令,当调用命令在加速层中不存在,则在第二架构编译环境中运行调用命令。这样可以使编译指令优先匹配加速层中的二进制进行加速,可以提高交叉编译的效率。
[0007]可选地,在根据本专利技术的方法中,可以首先生成第一架构的加速层和第二架构的编译环境;然后根据第一架构的加速层和第二架构的编译环境编译相应的转换程序。接着将第二架构的编译环境作为基础镜像,该基础镜像、加速层及转换程序结合生成编译环境容器。这样可以实现不同编译环境之间的隔离。
[0008]可选地,在根据本专利技术的方法中,为了生成第一架构的加速层,可以在第一架构平台上安装交叉编译工具链和编译工具。将交叉编译工具链和编译工具提取到加速层二进制文件夹,将交叉编译工具链依赖的动态库和编译工具依赖的动态库提取到加速层库文件夹;以及将加速层内二进制依赖的库地址更改为加速层库地址。
[0009]可选地,在根据本专利技术的方法中,编译工具包括对第二架构进行预处理、编译、汇
编和链接的工具。
[0010]可选地,在根据本专利技术的方法中,通过设置环境变量,使编译环境容器的搜索路径优先指向转换程序,以便转换程序通过判断编译指令中的调用命令是否由加速层提供。
[0011]可选地,在根据本专利技术的方法中,第一架构为Linux系统的x86、x86_64、x64架构中任意一种,第二架构为ARM、RISC

V、PPC架构中任意一种。
[0012]可选地,在根据本专利技术的方法中,通过调用加速层中的压缩工具,将编译好的二进制代码按照发行版格式打包成软件包。
[0013]根据本专利技术的另一个方面,提供一种交叉编译装置,该装置包括生成模块、获取模块、判断模块和运行模块。其中,生成模块可以基于第一架构的加速层、第二架构的编译环境和转换程序生成编译环境容器。获取模块可以获取待编译的软件包源代码并安装编译依赖包。判断模块可以响应于生成模块生成的编译环境容器中发起的对获取模块获取的软件包源代码的编译指令,判断编译指令中的调用命令在第一架构的加速层中是否存在。运行模块可以在判断模块判断调用命令在加速层中存在时,在加速层中运行调用命令,在判断模块判断调用命令在加速层中不存在时,在第二架构编译环境中运行调用命令。
[0014]根据本专利技术的又一个方面,提供一种计算设备,包括:至少一个处理器和存储有程序指令的存储器,其中,程序指令被配置为适于由至少一个处理器执行,程序指令包括用于执行上述方法的指令。
[0015]根据本专利技术的又一个方面,提供一种存储有程序指令的可读存储介质,当程序指令被计算设备读取并执行时,使得计算设备执行上述的方法。
[0016]根据本专利技术的方案,在主机上生成编译环境容器,使目标运行环境和本机运行环境基本一致,又能得到隔离的效果,当需要不同的编译工具时可以从相应的运行环境中调用,并且在调用时优先匹配主机加速层中的编译工具,可以对编译过程进行加速,从而提高交叉编译的效率。
[0017]上述说明仅是本专利技术技术方案的概述,为了能够更清楚了解本专利技术的技术手段,而可依照说明书的内容予以实施,并且为了让本专利技术的上述和其它目的、特征和优点能够更明显易懂,以下特举本专利技术的具体实施方式。
附图说明
[0018]通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本专利技术的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:图1示出了根据本专利技术一个实施例的计算设备100的结构图;图2示出了根据本专利技术一个实施例的交叉编译方法200的流程示意图;图3示出了根据本专利技术的一个实施例的生成编译环境容器的流程图;图4示出了根据本专利技术的一个实施例的编译环境结构示意图;图5示出了根据本专利技术一个实施例的交叉编译装置500的结构示意图。
具体实施方式
[0019]下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开
的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0020]编译就是将某种程序设计语言编译的程序翻译成二进制语言描述的可执行代码或程序。而交叉编译可以理解为在当前编译平台编译出的程序能运行在体系结构不同的另一种目标平台上。例如在X86平台上编译能在ARM平台运行的程序。之所以进行交叉编译,是由于目标平台的运行速度往往比主机慢,例如ARM等嵌入式系统被设计为低功耗和低成本,性能较低。而整个编译过程是非常消耗资源的,嵌入式系统往往没有足够的内存。考虑到不同的体系架构有不同的机器特性,交叉编译时主机环境与目标环境不同,并且每个发行版软件的包管理、软件版本、补丁均不相同,因此需要提供一种与目标环境一致的主机环境,使交叉编译更加高效。
[0021]本方案在容器化编译环境内,通过判断目标架构的编译指令是否可由本机架构二进制替换,能够在保证编译环境与目标环境基本一致的前提下,高效率进行交叉编译。本方案提供了一种交叉编译方法,适于在计算设备中执行,其中计算设备中可以包括第一架构处理器。第一架构处理器可以直接运本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种交叉编译方法,适于在计算设备中执行,其特征在于,所述方法包括:基于第一架构的加速层、第二架构的编译环境和转换程序生成编译环境容器;获取待编译的软件包源代码并安装编译依赖包;响应于所述编译环境容器中发起的对所述软件包源代码的编译指令,所述转换程序判断所述编译指令中的调用命令在第一架构的加速层中是否存在;当所述调用命令在所述加速层中存在,则在所述加速层中运行所述调用命令,当所述调用命令在加速层中不存在,则在所述第二架构的编译环境中运行所述调用命令。2.根据权利要求1所述的方法,其特征在于,所述基于第一架构的加速层、第二架构的编译环境和转换程序生成编译环境容器的方法包括:生成第一架构的加速层和第二架构的编译环境;根据第一架构的加速层和第二架构的编译环境编译相应的转换程序;将所述第二架构的编译环境作为基础镜像,所述基础镜像、加速层及转换程序结合生成编译环境容器。3.根据权利要求1所述的方法,其特征在于,所述构建第一架构的加速层的步骤包括:在第一架构平台上安装交叉编译工具链和编译工具;将所述交叉编译工具链和编译工具提取到加速层二进制文件夹,将所述交叉编译工具链依赖的动态库和所述编译工具依赖的动态库提取到加速层库文件夹;以及将加速层内二进制依赖的库地址更改为加速层库地址,生成第一架构的加速层。4.根据权利要求3所述的方法,其特征在于,所述编译工具包括对第二架构进行预处理、编译、汇编和链接的工具。5.根据权利要求1所述的方法,其特征在于,所述响应于对所述软件包源代码的编译指令,判断所述编译指令中的调用命令在第一架构的加速层中是否存在的步骤包括:设置环境变量,使编译...

【专利技术属性】
技术研发人员:何阳轩隋平礼曾宏安
申请(专利权)人:北京凝思软件股份有限公司
类型:发明
国别省市:

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

1