【问题标题】:Build libmariadb with Yocto使用 Yocto 构建 libmariadb
【发布时间】:2023-02-07 22:31:05
【问题描述】:

我正在尝试为使用 libmariadb 的 C++ 应用程序制作一个食谱。在开发过程中,我使用的是 vcpkg,但现在我想使用 Yocto。

这是 application_1.0.0.bb 文件:

# Metadata
SUMMARY = "Customer API Backend"
DESCRIPTION = "Customer API in C++ using gRPC"

# License is closed, no checksum to avoid warnings
LICENSE = "CLOSED"
LIC_FILE_CHKSUM = ""

DEPENDS = "protobuf protobuf-c protobuf-native grpc grpc-native openssl mariadb poco"

SRCREV = "${AUTOREV}"
SRC_URI = "git://git@gitlab.com/software/projects/embedded/application.git;protocol=ssh;branch=master;"

S = "${WORKDIR}/git"

inherit pkgconfig cmake

这是对 Yocto 造成问题的 CMake 部分:

find_package(unofficial-libmariadb CONFIG REQUIRED)
find_package(Poco REQUIRED COMPONENTS Data DataMySQL)
target_link_libraries(database_api
    PRIVATE
        unofficial::libmariadb
        Poco::DataMySQL
)

我在配置步骤 (CMake) 中收到此错误消息:

CMake Error at src/libraries/external_interfaces/database_api/CMakeLists.txt:20 (find_package):
  Could not find a package configuration file probided by
  "unofficial-libmariadb" with any of the following names:

    unofficial-libmariadbConfig.cmake
    unofficial-libmariadb-config.cmake

  Add the installation prefix of "unofficial-libmariadb" to CMAKE_PREFIX_PATH
  or set "unofficial-libmariadb_DIR" to a directory containing one of the
  above files. If "unofficial-libmariadb" provides a separate development
  package or SDK, be sure it has been installed.

我尝试将 mariadb-native 添加到 bitbake 食谱上的 DEPENDS,但随后我收到此错误消息when configuring mariadb-native`:

CMake Error at /home/oe-core/build/tmp/work/x86_64-linux/mariadb-native/10.7.5-r0/recipe-sysroot-native/usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
    Could NOT find GnuTLS (missing: GNUTLS_LIBRARY GNUTLS_INCLUDE_DIR)
    (Required is at least version "3.3.24")
Call Stack (most recent call first):
(...)
-- Configuring incomplete, errors occurred!

【问题讨论】:

  • 嗯,错误信息很清楚,不是吗?在 mariadb 目标中有一个看起来像这样的调用 find_package(GnuTLS) 即它与您在 mariadb 中遇到的问题相同......将其添加为另一个依赖项将是一个好的开始。
  • 谢谢你的建议。我试图将它添加到 DEPENDS 中,但它没有改变任何东西。我仍然有同样的错误信息
  • 问题是您添加的依赖项的方式和内容是什么。我不是 Yocto 或 BitBake 的专家。但是错误消息非常清楚,因为 CMakeLists.txt 找不到合适的 GnuTLS 我会检查 mariadb CMakeLists.txt 是否有任何相关的内容(可能是 find_libraryfind_package)并查看了解它如何搜索图书馆。通过修复你将解决你的问题。
  • DEPENDS= 不包含 gnutls - 看起来这是来自 libmysql 项目的副本。你真的需要protobuf吗?

标签: cmake mariadb yocto


【解决方案1】:

好的,我通过使用更新版本的 mariadb 食谱 + vcpkg mariadb 端口补丁解决了这个问题:

  1. 对于 mariadb-native 构建: 在图层的 recipes-dbs/mysql/ 文件夹中添加 mariadb-native_%.bbappend:
    DEPENDS:append = " gnutls-native fmt-native"
    

    替代方案是使用更新的 mariadb-native_%.bb 配方,因为它已经包含在内。如果像我一样,您有 10.7.4 或其他版本,则需要 bbappend。

    1. 对于非官方-mariadb 目标: 在mariadb 配方上使用 Yocto 的devtool,我刚刚复制了 libmariadb 的 vcpkg 端口具有的补丁(可在此处找到:https://github.com/microsoft/vcpkg/tree/master/ports/libmariadb)。重要的是对 libmariadb/CMakeLists.txt 的修改(但从 mariadb 配方来看,这是 libmariadb/libmariadb/CMakeLists.txt,因为这是一个更高的 repo 层)。这个补丁导出了 unofficial-libmariadb 并且还使用了 unofficial:: 命名空间。这使我的项目兼容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2017-06-02
    • 2021-10-14
    • 1970-01-01
    • 2018-05-13
    • 2020-07-28
    相关资源
    最近更新 更多