Yocto Dunfell - glibc do_stash_locale 在启用 multilib 的环境中失败
Yocto Dunfell - glibc do_stash_locale failed in multilib enabled environment
Yocto 在 glibc 中构建失败。在 do_stash_locale 中构建失败,出现以下错误。
ERROR: lib64-glibc-2.31+gitAUTOINC+1094741224-r0 do_stash_locale: The recipe lib64-glibc is trying to install files into a shared area when those files already exist. Those files and their manifest location are:
/mnt/********/workspace/********/build-********/tmp/sysroots-components/aarch64/glibc-stash-locale/SUPPORTED
(matched in manifest-aarch64-glibc.stash_locale)
/mnt/********/workspace/********/build-********/tmp/sysroots-components/aarch64/glibc-stash-locale/scripts/sotruss
(matched in manifest-aarch64-glibc.stash_locale)
/mnt/********/workspace/********/build-********/tmp/sysroots-components/aarch64/glibc-stash-locale/scripts/xtrace
(matched in manifest-aarch64-glibc.stash_locale)
/mnt/********/workspace/********/build-********/tmp/sysroots-components/aarch64/glibc-stash-locale/scripts/mtrace
(matched in manifest-aarch64-glibc.stash_locale)
/mnt/********/workspace/********/build-********/tmp/sysroots-components/aarch64/glibc-stash-locale/usr/share/info/libc.info
(matched in manifest-aarch64-glibc.stash_locale)
.....
在构建中,我们启用了 multilib,因为:
- 64 位机器 (aarch64),内核需要使用 64 位工具链构建。
- 32 位用户空间应用程序,因此启用了 mulitlib。
- 此外,我们还需要 运行 几个 64 位应用程序,因此也使用了 multilib:lib64。
所以这里我们的配置是:
require conf/machine/include/tune-cortexa53.inc
require conf/multilib.conf
MULTILIBS = "multilib:lib32 multilib:lib64"
DEFAULTTUNE_virtclass-multilib-lib32 = "armv7at-neon"
IMAGE_INSTALL_append = " lib32-glib-2.0 lib32-bash"
DEFAULTTUNE = "cortexa53"
DEFAULTTUNE_virtclass-multilib-lib64 = "armv8a"
这里我们构建的最终目标是 lib32-xxxxx-image 和图像配方中包含的 64 位应用程序 IMAGE_INSTALL_append += " lib64-xxxxx".
当我们在没有任何 sstate 缓存的情况下进行全新构建时,glibc 中的构建失败 do_stash_locale。如果能得到一些指点会很有帮助吗?
我通过将所需的配方添加到 NON_MULTILIB_RECIPES 中找到了解决方案,因此对于那些包,mlprefix 将被删除并使用默认工具链来构建它。
所以在这里:
- 定义 multilib:lib32 以使用 32 位工具链构建用户空间应用程序。
- 对于需要 64 位工具链的应用程序,将这些配方添加到 NON_MULTILIB_RECIPES += " xxxx yyyy "
所以这里不需要同时添加 32 位和 64 位多库,因为默认调是 64 位。
Yocto 在 glibc 中构建失败。在 do_stash_locale 中构建失败,出现以下错误。
ERROR: lib64-glibc-2.31+gitAUTOINC+1094741224-r0 do_stash_locale: The recipe lib64-glibc is trying to install files into a shared area when those files already exist. Those files and their manifest location are:
/mnt/********/workspace/********/build-********/tmp/sysroots-components/aarch64/glibc-stash-locale/SUPPORTED
(matched in manifest-aarch64-glibc.stash_locale)
/mnt/********/workspace/********/build-********/tmp/sysroots-components/aarch64/glibc-stash-locale/scripts/sotruss
(matched in manifest-aarch64-glibc.stash_locale)
/mnt/********/workspace/********/build-********/tmp/sysroots-components/aarch64/glibc-stash-locale/scripts/xtrace
(matched in manifest-aarch64-glibc.stash_locale)
/mnt/********/workspace/********/build-********/tmp/sysroots-components/aarch64/glibc-stash-locale/scripts/mtrace
(matched in manifest-aarch64-glibc.stash_locale)
/mnt/********/workspace/********/build-********/tmp/sysroots-components/aarch64/glibc-stash-locale/usr/share/info/libc.info
(matched in manifest-aarch64-glibc.stash_locale)
.....
在构建中,我们启用了 multilib,因为:
- 64 位机器 (aarch64),内核需要使用 64 位工具链构建。
- 32 位用户空间应用程序,因此启用了 mulitlib。
- 此外,我们还需要 运行 几个 64 位应用程序,因此也使用了 multilib:lib64。
所以这里我们的配置是:
require conf/machine/include/tune-cortexa53.inc
require conf/multilib.conf
MULTILIBS = "multilib:lib32 multilib:lib64"
DEFAULTTUNE_virtclass-multilib-lib32 = "armv7at-neon"
IMAGE_INSTALL_append = " lib32-glib-2.0 lib32-bash"
DEFAULTTUNE = "cortexa53"
DEFAULTTUNE_virtclass-multilib-lib64 = "armv8a"
这里我们构建的最终目标是 lib32-xxxxx-image 和图像配方中包含的 64 位应用程序 IMAGE_INSTALL_append += " lib64-xxxxx".
当我们在没有任何 sstate 缓存的情况下进行全新构建时,glibc 中的构建失败 do_stash_locale。如果能得到一些指点会很有帮助吗?
我通过将所需的配方添加到 NON_MULTILIB_RECIPES 中找到了解决方案,因此对于那些包,mlprefix 将被删除并使用默认工具链来构建它。
所以在这里:
- 定义 multilib:lib32 以使用 32 位工具链构建用户空间应用程序。
- 对于需要 64 位工具链的应用程序,将这些配方添加到 NON_MULTILIB_RECIPES += " xxxx yyyy "
所以这里不需要同时添加 32 位和 64 位多库,因为默认调是 64 位。