我试图使用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中,食谱和包装是否有一对一的匹配。即,为了创建每个包,只有一个相应的配方?
答案 0 :(得分:4)
依次解释每一个:
当你说“你只需要构建gcc”时,你的意思并不完全清楚,但我怀疑它是目标的gcc(在这种情况下它是“gcc”,但我怀疑你可能需要更多比起packagegroup-core-buildessential可能是你想要的)或者你想要一个可以单独安装的交叉编译器,在这种情况下你可能应该bitbake meta-toolchain
或bitbake -c populate_sdk imagename
。这包含的不仅仅是gcc,但无论如何,gcc可能还不够。
答案 1 :(得分:0)
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 Kernel因为它们不需要C 库,他们实现了他们需要的C库函数。 LInux用户空间应用程序需要符合POSIX标准的C库。
glibc是Yocto项目中使用的默认C库。
在嵌入式系统上,我们需要一个交叉编译工具链。我们建立 在主机上,但在目标上运行结果二进制文件 通常不同的架构。有几种类型的工具链 基于构建机器,目标机器。
最常见的组合是:
Native:这是一个运行工具链的x86机器,它也是在x86机器上构建的 生成二进制文件以在x86机器上运行。这在桌面上很常见 电脑。
交叉编译:这是嵌入式中最常见的 系统;例如,运行工具链的x86机器也有 是在x86机器上构建的,但是生成二进制文件来运行 不同的架构,就像ARM一样。
跨本机:这通常是 工具链在目标上运行。一个例子是工具链 已经在x86机器上构建,但在ARM上运行并生成
加拿大人:很少见,这是构建,主机和目标的地方 机器都不同。