#包括<;植物学/植物学.h>;Yocto编译中没有这样的文件或目录

#包括<;植物学/植物学.h>;Yocto编译中没有这样的文件或目录,yocto,bitbake,botan,Yocto,Bitbake,Botan,嗨,我已经包括了来自的botan_2.14.0.bb,我已经将它加入我的yocto构建中。 以下是rpm结果: -rw-r--r-- 2 kjlau kjlau 155436 Jul 7 11:12 libbotan-2-bin-2.14.0-r0.cortexa8hf_neon.rpm -rw-r--r-- 2 kjlau kjlau 246916 Jul 7 11:12 libbotan-2-doc-2.14.0-r0.cortexa8hf_neon.rpm -rw-r--r

嗨,我已经包括了来自的botan_2.14.0.bb,我已经将它加入我的yocto构建中。 以下是rpm结果:

-rw-r--r-- 2 kjlau kjlau   155436 Jul   7 11:12 libbotan-2-bin-2.14.0-r0.cortexa8hf_neon.rpm
-rw-r--r-- 2 kjlau kjlau   246916 Jul   7 11:12 libbotan-2-doc-2.14.0-r0.cortexa8hf_neon.rpm
-rw-r--r-- 2 kjlau kjlau    16376 Jul   7 11:12 libbotan-2-python3-2.14.0-r0.cortexa8hf_neon.rpm
-rw-r--r-- 2 kjlau kjlau   255764 Jul   7 11:12 libbotan-2-dev-2.14.0-r0.cortexa8hf_neon.rpm
-rw-r--r-- 2 kjlau kjlau  1443276 Jul   7 11:12 libbotan-2-13-2.14.0-r0.cortexa8hf_neon.rpm
-rw-r--r-- 2 kjlau kjlau 19660652 Jul   7 11:13 libbotan-2-dbg-2.14.0-r0.cortexa8hf_neon.rpm
我尝试构建一个包含botan头的应用程序#include,但没有收到这样的文件或目录。下面是botanapp.bb的内容

DECRIPTION = "Simple helloworld application"
LICENSE = "CLOSED"
DEPENDS = "botan"
PACKAGES = "${PN} ${PN}-dbg"
SRC_URI = "file://app.cpp"

S = "${WORKDIR}"
CXXFLAGS = "-g -std=gnu++11"
inherit pkgconfig autotools

do_compile() {
    
     ${CXX} ${CXXFLAGS} ${LDFLAGS} -I ${includedir}/botan-2/botan   ${S}/app.cpp -lbotan-2  -o ${S}/myBotan
}

do_install() {
    install -d ${D}${bindir}
    install -m 0755  ${WORKDIR}/myBotan ${D}${bindir}
}

FILES_${PN} += " \
        ${bindir}/myBotan \
"
我已经检查了我的botanapp配方botanapp的系统根

$build/tmp/work/cortexa8hf-neon-poky-linux-gnueabi/botanapp/1.0-r0/recipe-sysroot/usr/include/botan-2/botan
$ ls botan*
    botan.h
标题可用,我不确定出了什么问题。据我所知,我需要这样做

g++ app.cpp -I/usr/local/include/botan-2 -lbotan-2
在ubuntu中编译botan代码。如果我做错了什么,请告诉我。

您需要的是。 ${includedir}是文件在映像处的位置。等等

但是使用DEPENDS,您要求Yocto准备一个sysroot,其中包含构建配方所需的所有内容。而STAGING_INCDIR指向该系统根

可以使用
includedir
,例如告诉install命令将文件放在映像中的何处

很容易找到其他食谱是如何做到这一点的。 源代码中的
grep-r'-I'
将指向许多使用编译器命令的方法。

您需要的是。
do_compile() {
     ${CXX} ${CXXFLAGS} ${LDFLAGS}  -o ${S}/botanBinary -I ${STAGING_DIR_TARGET}/${includedir}/botan-2 ${S}/app.cpp  -lbotan-2 
}
${includedir}是文件在映像处的位置。等等

但是使用DEPENDS,您要求Yocto准备一个sysroot,其中包含构建配方所需的所有内容。而STAGING_INCDIR指向该系统根

可以使用
includedir
,例如告诉install命令将文件放在映像中的何处

很容易找到其他食谱是如何做到这一点的。 您的源代码中的
grep-r'-I'
将指向许多使用编译器命令的配方

do_compile() {
     ${CXX} ${CXXFLAGS} ${LDFLAGS}  -o ${S}/botanBinary -I ${STAGING_DIR_TARGET}/${includedir}/botan-2 ${S}/app.cpp  -lbotan-2 
}
这项工作对我来说,让我知道如果有什么不合理的。谢谢


这项工作对我来说,让我知道如果有什么不合理的。谢谢

您好,谢谢您的反馈,我尝试使用STAGING_INCDIR,但它仍然找不到标题。我在我的帖子上附上了答案,你能看一下吗?嗨,谢谢你的反馈,我尝试了STAGING_INCDIR,但它仍然找不到标题。我在我的帖子上附上了答案,你能看一下吗?你应该有一个Makefile,CMakeLists,meson,无论什么,你的项目都可以从Yocto中抽象出这个逻辑。如果它写得正确,那么在
s=${WORKDIR}
之后几乎不需要任何东西。在构建目录中创建二进制文件应该是
-o$(B)/botanBinary
,而构建目录通常是do\u compile需要生成输出的地方
${STAGING\u INCDIR}
而不是
${STAGING\u DIR\u TARGET}/${includedir}
。同意,我是整个linux的初学者,让我进一步探讨一下。谢谢,你应该有一个Makefile,CMakeLists,meson,无论什么,你的项目都可以从Yocto中抽象出这个逻辑。如果它写得正确,那么在
s=${WORKDIR}
之后几乎不需要任何东西。在构建目录中创建二进制文件应该是
-o$(B)/botanBinary
,而构建目录通常是do\u compile需要生成输出的地方
${STAGING\u INCDIR}
而不是
${STAGING\u DIR\u TARGET}/${includedir}
。同意,我是整个linux的初学者,让我进一步探讨一下。谢谢