gpt4 book ai didi

c++ - 执行 populate_sdk 时如何使用 yocto 在 native sysroot 中安装文件?

转载 作者:行者123 更新时间:2023-11-28 04:11:51 37 4
gpt4 key购买 nike

我正在使用 Yocto (THUD) 为 imx6 处理器构建自定义镜像。使用图像,我创建了一个 QT 应用程序的配方和一个使用 cmake 构建的 c++ 库的配方。

我正在考虑为该图像构建 SDK。我希望 SDK 允许交叉编译,但也要编译 QT 应用程序,以便它可以在主机 (SDKMACHINE) 上运行。交叉编译部分就像一个魅力。这是关于构建 QT 应用程序以在我遇到问题的主机上运行的部分。

首先,这是库的配方:

SRC_URI = "file://LibName"

inherit cmake

S = "${WORKDIR}"

FILES_${PN} += "${includedir}/*.h ${includedir}/"

BBCLASSEXTEND = "native nativesdk"

do_configure() {
cmake ../LibName/src
}

do_install() {
install -d ${D}${libdir}
install -m 0755 ${S}/build/libLibName.so ${D}${libdir}/libLibName.so.0
ln -s libLibName.so.0 ${D}${libdir}/libLibName.so
install -m 0755 ${S}/build/libLibName.a ${D}${libdir}

install -d ${D}${includedir}/LibName/
cp -r ${S}/LibName/includes ${D}${includedir}/LibName/
install -d ${D}${includedir}/LibName/src
rsync -a --include='*.h' --include='*/' --exclude='*' ${S}/LibName/src/ ${D}${includedir}/LibName/src
}

在我的图像配方文件中,我添加了:

TOOLCHAIN_HOST_TASK += "nativesdk-lib-name"

然后我使用以下方法构建 SDK:

bitbake -c populate_sdk custom-iamge-recipe

我的问题是生成的 SDK 没有我期望在 native sysroot 中包含的文件。我期待我的 native sysroot (/opt/fslc-x11/2.6.2/sysroots/x86_64-fslcsdk-linux/usr/include) 将包含 C++ 库包含文件,就像目标 sysroot (/opt/fslc-x11/2.6.2/sysroots/armv7at2hf-neon-fslc-linux-gnueabi)。

我不明白的另一件事是 native sysroot 包含库 (libLibName.so.0),但不包含符号链接(symbolic link) (libLibName.so)。我原以为符号链接(symbolic link)会像在目标 sysroot 中一样出现。

这是我现在拥有的:

/opt/fslc-x11/2.6.2/sysroots
├── armv7at2hf-neon-fslc-linux-gnueabi/usr
│ ├── include
│ │ └── LibName
│ │ └── include files
│ └── lib
│ ├── libLibName.so.0
│ └── libLibName.so
└── x86_64-fslcsdk-linux/usr
└── lib
└── libLibName.so.0

这是我想要的:

/opt/fslc-x11/2.6.2/sysroots
├── armv7at2hf-neon-fslc-linux-gnueabi/usr
│ ├── include
│ │ └── LibName
│ │ └── include files
│ └── lib
│ ├── libLibName.so.0
│ └── libLibName.so
└── x86_64-fslcsdk-linux/usr
├── include
│ └── LibName
│ └── include files
└── lib
├── libLibName.so.0
└── libLibName.so

在此先感谢您的帮助,非常感谢!

最佳答案

PACKAGES 变量已定义 here作为:

PACKAGES = "${PN}-src ${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN}"

因此,当 Yocto 从配方中打包文件时,它会将它们包含在 PACKAGES 顺序中,在这种情况下,头文件包含在 ${PN}-dev 之前包含在 ${PN} 中:

FILES_${PN}-dev = "${includedir} ..."

要将 header 添加到您的 SDK,您可以添加 -dev 包:

TOOLCHAIN_HOST_TASK += "nativesdk-lib-name nativesdk-lib-name-dev"

请注意,您也可以这样重新定义 PACKAGES 变量:

PACKAGES = "${PN}"

让你的线路工作:FILES_${PN} += "${includedir}/*.h ${includedir}/"

关于c++ - 执行 populate_sdk 时如何使用 yocto 在 native sysroot 中安装文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57576746/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com