首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Yocto中其他菜谱生成的文件

使用Yocto中其他菜谱生成的文件
EN

Stack Overflow用户
提问于 2018-07-24 10:14:46
回答 3查看 8.2K关注 0票数 5

注:这篇文章结尾处的一般问题是粗体。

我正试图用Yocto (Rocko)为基于i.MX6的嵌入式系统构建i.MX6 2.2.7。首先,我从PostgreSQL层(https://layers.openembedded.org/layerindex/recipe/5558/)和安装手册(https://download.osgeo.org/postgis/docs/postgis-2.2.7.pdf)中找到了所有(强制性的)依赖项: GNU、Proj4、GEOS、LibXML2和JSON。将下列软件包添加到我的映像(local.conf)中:

代码语言:javascript
运行
复制
IMAGE_INSTALL_append += " postgresql postgresql-dev postgresql-server-dev proj proj-dev json-c json-c-dev geos geos-dev libxml2 libxml2-dev"

然后,我尝试在我的目标系统中编译PostGIS,并对我成功的几个文件做了一些更改。

最后,只要我想将PostGIS集成到Yocto的图像中,我就编写了postgis食谱(我有一个带有postgis-2.2.7.tar.gz tar的“文件”文件夹):

代码语言:javascript
运行
复制
DESCRIPTION = "PostGIS is a spatial database extender for PostgreSQL object-relational database. It adds support for geographic objects allowing location queries to be run in SQL."

SECTION = "devel"

LICENSE = "GPL-3.0"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-3.0;md5=c79ff39f19dfec6d293b95dea7b07891"

DEPENDS += "gcc postgresql libxml2 geos proj json-c"

RDEPENDS_${PN} = "postgresql-server-dev postgresql-dev"

SRC_URI = "file://postgis-2.2.7.tar.gz"

EXTRA_OECONF +=  "\
    --without-raster \
    --with-pgconfig=${STAGING_BINDIR_CROSS}"

inherit autotools pkgconfig

do_configure () {
    oe_runconf
}

do_compile () {
    oe_runmake
}

但是,当我运行bitbake以构建我的映像时,我从PostGIS的do_configure函数中得到以下错误

代码语言:javascript
运行
复制
| configure: error: the user-specified pg_config file /home/danlor/yocto-hmcu/build-hmcu/tmp/work/cortexa9hf-neon-poky-linux-gnueabi/postgis/2.2.7-r0/recipe-sysroot/usr/bin/crossscripts does not exist 
| NOTE: The following config.log files may provide further information. 
| NOTE: /home/danlor/yocto-hmcu/build-hmcu/tmp/work/cortexa9hf-neon-poky-linux-gnueabi/postgis/2.2.7-r0/build/config.log 
| ERROR: configure failed | WARNING: exit code 1 from a shell command. 
| ERROR: Function failed: do_configure (log file is located at /home/danlor/yocto-hmcu/build-hmcu/tmp/work/cortexa9hf-neon-poky-linux-gnueabi/postgis/2.2.7-r0/temp/log.do_configure.45983)

当然,触发此错误是因为可执行pg_config不在${STAGING_BINDIR_CROSS}中,也不在其他地方,而是在PostgreSQL的工作文件夹中(在./PostgreSQL/usr/bin和./package/usr/bin子文件夹中)。我的/tmp/sysroot文件夹也是空的。

因此,真正的问题是:如何访问从我自己的菜谱中生成的其他菜谱生成的文件?我需要指定路径(以及其他依赖项),以便在映像中配置、编译和安装

编辑26/07/2018:

pg_config可以在postgresql ${WORKDIR}中的以下目录中找到

代码语言:javascript
运行
复制
./package/usr/bin/pg_config
./package/usr/bin/.debug/pg_config
./package/usr/src/debug/postgresql/9.4.15-r0/postgresql-9.4.15/src/bin/pg_config
./postgresql-9.4.15/src/bin/pg_config
./build/src/bin/pg_config
./build/src/bin/pg_config/pg_config
./packages-split/postgresql-dbg/usr/bin/.debug/pg_config
./packages-split/postgresql-dbg/usr/src/debug/postgresql/9.4.15-r0/postgresql-9.4.15/src/bin/pg_config
./packages-split/postgresql/usr/bin/pg_config
./image/usr/bin/pg_config
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-26 20:44:43

sysroots是跨菜谱共享文件的方法。

如果pg_config位于${D}${bindir} (即在工作文件夹的映像/usr/bin中),则可以将其添加到postgres_x.x.x.bbappend文件中:

SYSROOT_DIRS += "${bindir}“

它将将postgresql的bindir中的所有文件复制到postgis的食谱-sysroot文件夹中。这不是一个好主意,因为pg_config是二进制和交叉编译的,所以它不会在您的系统上运行。这就是为什么默认情况下不将/usr/bin/从图像目录复制到sysroot。

您也可以修改暂存,而不是目录:

代码语言:javascript
运行
复制
sysroot_stage_all_append() {
  install -d ${SYSROOT_DESTDIR}${bindir}/crossscripts
  install -m 0755 ${D}${bindir}/pg-config ${SYSROOT_DESTDIR}${bindir}/crossscripts/pg-config
}
票数 3
EN

Stack Overflow用户

发布于 2018-07-26 06:28:03

首先,有几件事你需要检查你的食谱:

  • 您不必依赖gcc,因为它会自动添加BASEDEPENDS,而且它实际上会添加正确的交叉编译器,在这种情况下,您将依赖于本地编译器(它可能会帮助您检查bitbake -e的输出)。
  • 而且,您很可能不必覆盖do_configure() / compile()

现在,回答你的问题:

实际上,您想要的是访问其他菜谱安装的文件,在这种特定的情况下,您说文件pg_config是由postgresql菜谱生成的,然后通常您需要做的是在编译postgis菜谱之前添加postgresql到依赖项,这样,bibtake将执行一个名为prepare_recipe_sysroot的任务,它从列出的软件包中获取所有安装的文件,并将它们添加到食谱-sysroot/.或者食谱-sysroot本机/.,这样,当交叉编译您的包时,它将访问它所需的所有内容(或者至少是您列出的所有需要的内容)。

由于您已经列出了基于依赖的postgresql,所以我只能假设postgresql配方没有安装pg_config文件,为此您需要确保它是安装在postgresql食谱中的do_install()上,并且它是通过FILES_${PN}变量打包的(同样是在postgresql食谱上)。

要检查该文件是否由postgresql食谱提供,您可以在popstgresql目录下的sysroot-providers目录(在您的TMPDIR中)中查找该文件。

希望这有帮助

票数 4
EN

Stack Overflow用户

发布于 2020-09-08 11:04:31

文件“生成”并不十分清楚。如果您希望通过另一个菜谱“部署”这些文件,请在这里查看:https://yoctoproject.blogspot.com/2020/09/yocto-bitbake-and-dependencies-eg-one.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51496061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档