首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Buildroot:‘error:依赖关系"nlohmann_json“未找到,尝试了pkgconfig和cmake`’

Buildroot:‘error:依赖关系"nlohmann_json“未找到,尝试了pkgconfig和cmake`’
EN

Stack Overflow用户
提问于 2022-08-10 07:52:48
回答 1查看 118关注 0票数 0

我正在尝试在我的Buildroot包中添加只有头的库https://github.com/nlohmann/json "JSON C++“,以便在目标嵌入式Linux板上使用,以及在单元测试中在我的主机构建机器上使用。

但是,无论我做什么,我都会得到各种各样的错误,包括ERROR: Dependency "nlohmann_json" not found, tried pkgconfig and cmake

--添加这个库包的正确方法是什么?

有关我的设置的详细信息:

该JSON库在Buildroot源代码中称为json-for-modern-cpp,位于这里:https://github.com/buildroot/buildroot/tree/master/package/json-for-modern-cpp

我的buildroot/package/json-for-modern-cpp/json-for-modern-cpp.mk文件从Buildroot直接看上去像像这样

代码语言:javascript
运行
复制
################################################################################
#
# json-for-modern-cpp
#
################################################################################

JSON_FOR_MODERN_CPP_VERSION = 3.10.5
JSON_FOR_MODERN_CPP_SOURCE = json-$(JSON_FOR_MODERN_CPP_VERSION).tar.gz
JSON_FOR_MODERN_CPP_SITE = $(call github,nlohmann,json,v$(JSON_FOR_MODERN_CPP_VERSION))
JSON_FOR_MODERN_CPP_LICENSE = MIT
JSON_FOR_MODERN_CPP_LICENSE_FILES = LICENSE.MIT
JSON_FOR_MODERN_CPP_CPE_ID_VENDOR = json-for-modern-cpp_project

JSON_FOR_MODERN_CPP_INSTALL_STAGING = YES
# header only library
JSON_FOR_MODERN_CPP_INSTALL_TARGET = NO
JSON_FOR_MODERN_CPP_CONF_OPTS = -DJSON_BuildTests=OFF -DJSON_MultipleHeaders=ON

$(eval $(cmake-package))

我的包的br2-external/package/my-module-name/my-module-name.mk makefile中包含这些依赖项(注意,我在MY_MODULE_NAME_DEPENDENCIES目标板依赖项以及HOST_MY_MODULE_NAME_DEPENDENCIES主机构建系统依赖项中都添加了json-for-modern-cpp

代码语言:javascript
运行
复制
MY_MODULE_NAME_DEPENDENCIES += \
    some-other-lib1 \
    some-other-lib2 \
    json-for-modern-cpp

HOST_MY_MODULE_NAME_DEPENDENCIES += \
    host-some-other-lib1 \
    host-some-other-lib2 \
    json-for-modern-cpp
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-10 07:52:48

如何将Buildroot包添加到包和meson.build文件中

我想通了。我在我的eRCaGuy_dotfiles/git & Linux cmds, help, tips & tricks - Gabriel.txt便笺文件中记录了我学到的东西。搜索该文档中的“从其他meson.build文件中添加依赖项”和"nlohmann“以获取详细信息和注释。

以下是解决办法:

如果需要添加第三方库或类似于现代C++ (https://github.com/nlohmann/json)的JSON之类的依赖项,只需这样做:

  1. 查找该项目的meson.build文件。例:https://github.com/nlohmann/json/blob/develop/meson.build注意到顶部的'nlohmann_json'项目名称。在模块的meson.build文件中使用: https://github.com/nlohmann/json/blob/develop/meson.build#L1 =# NB:这个nlohmann\_json meson.build名称可以从它的公共回购的# meson.build文件中识别出来:nlohmann\_json dependency('nlohmann_json') dependency('some_other_lib2'),dependency('some_other_lib3'),dependency('some_other_lib4'), 然后,all_deps将在您的meson.build文件中用于构建可执行文件并指定库依赖项--例如: my_lib = static_library(‘my_my_name’,include_directories : include_dirs,源: library_sources,依赖项: all_deps,cpp_args: compiler_options,install: true,)
  2. $(eval $(host-cmake-package))添加到Buildroot中的json-for-modern-cpp.mk文件底部:https://github.com/buildroot/buildroot/blob/master/package/json-for-modern-cpp/json-for-modern-cpp.mk。这需要将您自己的提交添加到该回购的自定义分支中。 它将从以下内容更改该文件: ################################################################################ ##json-代表现代cpp################################################################################# JSON_FOR_MODERN_CPP_VERSION = 3.10.5 JSON_FOR_MODERN_CPP_SOURCE = json-$(JSON_FOR_MODERN_CPP_VERSION).tar.gz JSON_FOR_MODERN_CPP_SITE =$(调用github,nlohmann,json,v.$(JSON_FOR_MODERN_CPP_VERSION) JSON_FOR_MODERN_CPP_LICENSE = MIT JSON_FOR_MODERN_CPP_LICENSE_FILES = LICENSE.MIT JSON_FOR_MODERN_CPP_CPE_ID_VENDOR =json-for现代-cpp_project JSON_FOR_MODERN_CPP_INSTALL_STAGING = YES #报头专用库JSON_FOR_MODERN_CPP_INSTALL_TARGET = NO JSON_FOR_MODERN_CPP_CONF_OPTS = -DJSON_BuildTests=OFF -DJSON_MultipleHeaders=ON $(eval $(cmake-package)) 对此: ################################################################################ ##json-代表现代cpp################################################################################# JSON_FOR_MODERN_CPP_VERSION = 3.10.5 JSON_FOR_MODERN_CPP_SOURCE = json-$(JSON_FOR_MODERN_CPP_VERSION).tar.gz JSON_FOR_MODERN_CPP_SITE =$(调用github,诺曼,杰森V$(JSON_FOR_MODERN_CPP_VERSION) JSON_FOR_MODERN_CPP_LICENSE = MIT JSON_FOR_MODERN_CPP_LICENSE_FILES = LICENSE.MIT JSON_FOR_MODERN_CPP_CPE_ID_VENDOR =json-for现代-cpp_project JSON_FOR_MODERN_CPP_INSTALL_STAGING = YES #报头专用库JSON_FOR_MODERN_CPP_INSTALL_TARGET = NO JSON_FOR_MODERN_CPP_CONF_OPTS = -DJSON_BuildTests=OFF -DJSON_MultipleHeaders=ON $(eval $(cmake-package )) $(eval $(主机-cmake-包)) 再一次,唯一增加的一行是上面最后一行。这导致cmake也为主机构建计算机带来了必要的依赖关系,您的单元测试也是如此,而不仅仅是目标嵌入式Linux板,这正是$(eval $(cmake-package))行所做的。
  3. 在模块的Buildroot br2-external/package/my-module-name/my-module-name.mk makefile中使用适当的依赖项。对于主机来说,它应该是host-json-for-modern-cpp,而不是json-for-modern-cpp,因为后者只适用于目标板。请注意,json-for-modern-cpp名称似乎是在这里的配置文件中定义的,顺便说一句:https://github.com/buildroot/buildroot/blob/master/package/json-for-modern-cpp/Config.in#L2。 MY_MODULE_NAME_DEPENDENCIES += \一些其他lib2 1\一些其他lib2 2\json代表现代cpp HOST_MY_MODULE_NAME_DEPENDENCIES += \host-其他lib2 1\host一些其他lib2 2\host-json代表现代cpp#这最后一行现在是**固定**!

就这样!现在起作用了。

我不知道为什么我必须将$(eval $(host-cmake-package))添加到buildroot文件中,因为在默认情况下,这似乎应该是文件在Buildroot回购中。中的某些内容,不是吗?

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

https://stackoverflow.com/questions/73302642

复制
相关文章

相似问题

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