我正在使用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没有本机sysroot中包含的包含文件。我期望我的本机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)。
我不了解的另一件事是本机sysroot包含库(libLibName.so.0),但不包含符号链接(libLibName.so)。我期望符号链接会像在目标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
在此先感谢您的帮助,不胜感激!
答案 0 :(得分:1)
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} ..."
要将标头添加到SDK中,您可以添加-dev
软件包:
TOOLCHAIN_HOST_TASK += "nativesdk-lib-name nativesdk-lib-name-dev"
请注意,您还可以通过以下方式重新定义PACKAGES
变量:
PACKAGES = "${PN}"
使您的电话线正常工作:FILES_${PN} += "${includedir}/*.h ${includedir}/"