postgresql - 在 Yocto 中使用其他配方生成的文件

标签 postgresql cross-compiling embedded-linux postgis yocto

注意:一般问题在本文末尾以粗体显示。

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

IMAGE_INSTALL_append += " postgresql postgresql-dev postgresql-server-dev proj proj-dev json-c json-c-dev geos geos-dev libxml2 libxml2-dev"

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

最后,只要我想用 Yocto 将 PostGIS 集成到我的图像中,我就写了 postgis 配方(我有一个带有 postgis-2.2.7.ta​​r.gz tar 的“files”文件夹):

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 函数中得到以下错误

| 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 的工作文件夹中(在 ../image/usr/bin 中)和 ../package/usr/bin 子文件夹)。我的/tmp/sysroots 文件夹也是空的。

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

编辑 26/07/2018:

pg_config 可以在 postgresql ${WORKDIR}

的以下目录中找到
./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

最佳答案

首先,您需要检查食谱中的几件事:

  • 您不必依赖 gcc,因为它会自动添加 thought BASEDEPENDS ,并且它实际上会添加正确的 CROSS 编译器,在这种情况下,您依赖于 native 编译器(它可能会帮助您检查 bitbake -e 的输出)。

  • 此外,您很可能不必重写 do_configure()/do compile()

现在,回答你的问题:

您真正想要的是访问其他配方安装的文件,在这种特定情况下,您说文件 pg_config 是由 postgresql 配方生成的,那么通常您需要做的是将 postgresql 添加到 DEPENDS 中,这样,在编译 postgis 配方之前,bibtake 将执行一个名为 prepare_recipe_sysroot 的任务,该任务将从 DEPENDS 上列出的包中安装所有文件,并将它们添加到 recipe-sysroot/... 或 recipe-sysroot-native/... ,这种方式在交叉时编译你的包,它将可以访问它需要的所有内容(或者至少你列出的所有它需要的内容)。

因为你已经在 DEPENDS 上列出了 postgresql,我只能假设 postgresql 配方没有安装 pg_config 文件,要做到这一点,你需要确保它正在从 postgresql 配方安装在 do_install() 上,并且它通过 FILES_${PN} 变量打包(同样在 postgresql 配方中)。

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

希望对你有帮助

关于postgresql - 在 Yocto 中使用其他配方生成的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51496061/

相关文章:

regex - 如何简化 postgres regexp_replace

linux - POSIX 串行端口上的 read() 可能很慢的原因是什么?

postgresql - pgagent centos 6.2

SQL CHECK 约束以防止日期重叠

python - 交叉编译python for arm时导入zlib错误

linux - 编译 GCC 并安装到 DESTDIR

c++ - 仅使用 C 为目标交叉编译 C++ 应用程序

raspberry-pi - 嵌入式Linux的理论要求

linux - 树莓派 : Unable to set my RPI as a router

Postgresql:将一些正确的默认值或 NA 插入到具有错误类型值的表中?