仅使用 yocto 构建 gcc

问题描述 投票:0回答:2

我试图仅使用 Yocto 构建

gcc
。我尝试使用
bitbake-layers show-recipes
,它显示了
gcc
的多种食谱,与
bitbake -s
类似。

#bitbake-layers show-recipes 
gcc:
  meta                 4.8.2
gcc-cross:
  meta                 4.8.2
gcc-cross-canadian-arm:
  meta                 4.8.2
gcc-cross-initial:
  meta                 4.8.2
gcc-crosssdk:
  meta                 4.8.2
gcc-crosssdk-initial:
  meta                 4.8.2
gcc-runtime:
  meta                 4.8.2
gccmakedep:
  meta                 1:1.0.2
 
#bitbake -s 
gcc                                                 :4.8.2-r0                          
gcc-cross                                           :4.8.2-r0                          
gcc-cross-canadian-arm                              :4.8.2-r0                          
gcc-cross-initial                                   :4.8.2-r0                          
gcc-crosssdk                                        :4.8.2-r0                          
gcc-crosssdk-initial                                :4.8.2-r0                          
gcc-runtime                                         :4.8.2-r0                          
gccmakedep                                         1:1.0.2-r3

请指导我理解为什么有多个与

gcc
相关的食谱以及我必须构建哪一个。

在 Yocto 中,配方和包装是否存在一对一匹配。即,对于创建每个包,只有一个对应的配方?

gcc yocto yocto-recipe gcc4.8
2个回答
6
投票

依次解释每一项:

  • gcc 是在目标机器本身上运行的 gcc 的配方。
  • gcc-cross 是构建系统使用的交叉编译器。如果您为需要使用 gcc 编译的目标构建任何配方,则这将用于编译该目标。
  • gcc-cross-canadian- 是 SDK 的最终可重定位交叉编译器,在本例中适用于 ARM 架构。
  • gcc-crosssdk 是生成 gcc-cross-canadian 的中间步骤。
  • *-initial 是为标准交叉编译器和 SDK 分别引导工具链所需的编译器的初始版本。
  • gcc-runtime 构建作为 gcc 一部分的运行时组件(例如 libstdc++)。
  • gccmakedep 实际上并不是 gcc 本身的一部分,它是一个作为 X11 实用程序一部分的脚本,某些项目需要确定每个源文件的依赖关系。

当你说“你只需要构建 gcc”时,并不完全清楚你的意思,但我怀疑它是目标的 gcc (在这种情况下它是“gcc”,尽管我怀疑你可能需要更多- packagegroup-core-buildessential 可能是您想要的)或者您想要一个可以单独安装的交叉编译器,在这种情况下您可能应该

bitbake meta-toolchain
bitbake -c populate_sdk imagename
。这将不仅仅包含 gcc,但单独的 gcc 可能还不够。


0
投票

GCC是一个巨大的项目。也许这个recipe可以帮助你更好地理解GCC和Yocto。 以下信息是 Alex Gonzalez 的《Embedded Linux Projects using Yocto Project Cookbook》中的一些信息释义

GNU 工具链包含以下组件:

汇编器(GNU as):binutils 包的一部分

链接器(GNU ID): binutils 包的一部分

编译器(GNU gcc):支持C、C++、 Java、Ada、Fortran 和 Objective C

调试器(GNU gdb):GNU 调试器

二进制文件工具(objdump、nm、objcopy、readelf、strip 等): 这些是 binutils 包的一部分

这些组件足以构建裸机应用程序 像 u-boot、Linux 内核这样的引导加载程序,因为它们不需要 C 库并实现他们需要的 C 库函数。 LInux 用户空间应用程序需要符合 POSIX 的 C 库。

glibc 是 Yocto 项目中使用的默认 C 库。

在嵌入式系统上,我们需要一个交叉编译工具链。 我们建造 在主机上,但在目标上运行结果二进制文件 通常是不同的架构。 工具链有多种类型 基于构建机器、目标机器。

最常见的组合是:

Native:一个例子是运行工具链的 x86 机器,该工具链也是在 x86 机器上构建的 生成在 x86 机器上运行的二进制文件。这在桌面上很常见 电脑。

交叉编译:这是嵌入式上最常见的 系统;例如,运行工具链的 x86 机器也具有 在 x86 机器上构建,但生成在 x86 机器上运行的二进制文件 不同的架构,例如ARM。

跨原生:这通常是 在目标上运行的工具链。一个例子是工具链 已在 x86 机器上构建,但在 ARM 上运行并生成

加拿大语:很少见,这是构建、主机和目标的地方 机器都不同。

© www.soinside.com 2019 - 2024. All rights reserved.