【发布时间】:2020-05-21 18:16:42
【问题描述】:
我正在尝试在 yocto 中将一些原生包构建为 32 位(实际上是 2.6.1,在 64 位 linux 上)。我的目标根本不使用 multilib。假设我正在构建配方a,它需要(所有构建时,静态链接)包b 以及zlib 和libcrypto。通过简单地将-m32 添加到 gcc 调用中,我设法将 a 和 b 构建为 32 位,并且链接/运行正常。但是,构建系统不知道它并将所有内容放在work/x86_64-linux 下。
我必须使用预构建的 32 位 zlib 和 libcrypto 库才能工作,因为 yocto 当然会在我允许的时候尝试给我 64 位版本的 zlib 和 libcrypto (DEPENDS_class-native = "b-native zlib-native openssl-native"),从而导致链接器错误.让 yocto 在正确的架构中为我构建它们会很好。
我已经尝试过TARGET_ARCH 和BUILD_ARCH,但它要么根本没有将其更改为 32 位,要么它给出了一个它找不到的错误,例如quilt 为 32 位(应用补丁,可以/应该使用 64 位被子完成)。
具体的错误前面有很多
WARNING: a-native-1_0.4-r0 do_prepare_recipe_sysroot:
Manifest /yoctoroot/work/sstate-control/manifest-i586-quilt-native.populate_sysroot
not found in i586 (variant '')?
....
WARNING: a-native-1_0.4-r0 do_prepare_recipe_sysroot:
Manifest /yoctoroot/work/sstate-control/manifest-i586-openssl-native.populate_sysroot
not found in i586 (variant '')?
....
ERROR: a-native-1_0.4-r0 do_patch:
Command Error: 'quilt --quiltrc /yoctoroot/work/i586-linux/a-native/1_0.4-r0/recipe-sysroot-native/etc/quiltrc push'
exited with 0 Output: /bin/sh: quilt: command not found
ERROR: a-native-1_0.4-r0 do_patch: Function failed: patch_do_patch
ERROR: Logfile of failure stored in: ...
当我添加时
BUILD_ARCH_native = "i586"
BUILD_ARCH_class-native = "i586"
TARGET_ARCH_native = "x86"
TARGET_ARCH_class-native = "x86"
到 a 和 b 接收器。
包 a 和 b 不是纯原生的,它们也是为目标构建的,并使用 BBCLASSEXTEND = "native" 来启用原生构建;理想情况下,解决方案不应破坏目标构建,也不应破坏生态系统中的所有其他原生内容。
我想要它们 32 位的原因是包 a 和 b 执行混合的指针/整数运算,当这些数据类型的大小不匹配时会中断;如果我不必更改这些来源,我将不胜感激。我是不是要求太多了?
提前感谢您的任何想法和指示!
【问题讨论】: