如何使用 jsoncpp 库在 yocto 中编译 git repo?
how to compile a git repo in yocto with jsoncpp libary?
我写了一个在 Yocto 中编译 git 回购的方法。存储库包含一个 Makefile 来编译代码。我第一次能够在 Yocto 中编译代码,但是当我在我的代码中添加 jsoncpp 库时,Yocto 无法编译它。它显示了一些错误,如
test_1.cpp:5:10: fatal error: jsoncpp/json/json.h: No such file or directory
| 5 | #include <jsoncpp/json/json.h>
| | ^~~~~~~~~~~~~~~~~~~~~
这是我的食谱文件。请建议我编译代码需要做的更改。
yocto_test.bb
SUMMARY = "Hello World"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
DEPENDS = "jsoncpp"
SRCREV = "90052737ee51abca69a334a9208e2fec82d78c19"
SRC_URI = " \
git://github.com/arghyaBiswas05/yocto-test.git \
"
S = "${WORKDIR}/git/"
do_compile() {
oe_runmake all
}
# Install binary to final directory /usr/bin
do_install() {
install -d ${D}${bindir}
install -m 0755 ${S}test_file ${D}${bindir}
}
这是我的 Makefile
all:
${CXX} test_1.cpp -o test_file $(shell pkg-config --cflags --libs jsoncpp)
install:
cp test_file /usr/bin
clean:
rm -rf test_file
请建议我更改。
Makefile 应该使用 CXXFLAGS
和 LDFLAGS
而不是硬编码的 JSONLIB
。这两个变量相应地由 Yocto 设置,并且需要能够找到您在 DEPENDS
.
中的食谱提供的文件。
如果我可以建议,使用 meson、autotools 或 cmake 可能比手动编写 Makefille 更快。
命令pkg-config --cflags --libs jsoncpp
的输出是什么?如果你 运行 它来自 Yocto,它会打印什么?您可以要求您的 makefile 本身打印此信息,方法是在 makefile 中添加如下内容:
$(info args: $(shell pkg-config --cflags --libs jsoncpp))
它可能会打印一些东西,包括标志 -I/usr/include/jasoncpp
。如果确实如此,那么您的 #include
是错误的,因为 /usr/include/jasoncpp
的 -I
加上 jasoncpp/json/json.h
的包含给出了 /usr/include/jasoncpp/jasoncpp/json/json.h
的完整路径,并且该文件显然没有不存在。
我认为您的 include 很可能应该是 #include <json/json.h>
,但是如果不知道 jsoncpp
包是如何安装的,它把它的 headers 放在哪里,就无法确定它期望什么标志。
我写了一个在 Yocto 中编译 git 回购的方法。存储库包含一个 Makefile 来编译代码。我第一次能够在 Yocto 中编译代码,但是当我在我的代码中添加 jsoncpp 库时,Yocto 无法编译它。它显示了一些错误,如
test_1.cpp:5:10: fatal error: jsoncpp/json/json.h: No such file or directory
| 5 | #include <jsoncpp/json/json.h>
| | ^~~~~~~~~~~~~~~~~~~~~
这是我的食谱文件。请建议我编译代码需要做的更改。
yocto_test.bb
SUMMARY = "Hello World"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
DEPENDS = "jsoncpp"
SRCREV = "90052737ee51abca69a334a9208e2fec82d78c19"
SRC_URI = " \
git://github.com/arghyaBiswas05/yocto-test.git \
"
S = "${WORKDIR}/git/"
do_compile() {
oe_runmake all
}
# Install binary to final directory /usr/bin
do_install() {
install -d ${D}${bindir}
install -m 0755 ${S}test_file ${D}${bindir}
}
这是我的 Makefile
all:
${CXX} test_1.cpp -o test_file $(shell pkg-config --cflags --libs jsoncpp)
install:
cp test_file /usr/bin
clean:
rm -rf test_file
请建议我更改。
Makefile 应该使用 CXXFLAGS
和 LDFLAGS
而不是硬编码的 JSONLIB
。这两个变量相应地由 Yocto 设置,并且需要能够找到您在 DEPENDS
.
如果我可以建议,使用 meson、autotools 或 cmake 可能比手动编写 Makefille 更快。
命令pkg-config --cflags --libs jsoncpp
的输出是什么?如果你 运行 它来自 Yocto,它会打印什么?您可以要求您的 makefile 本身打印此信息,方法是在 makefile 中添加如下内容:
$(info args: $(shell pkg-config --cflags --libs jsoncpp))
它可能会打印一些东西,包括标志 -I/usr/include/jasoncpp
。如果确实如此,那么您的 #include
是错误的,因为 /usr/include/jasoncpp
的 -I
加上 jasoncpp/json/json.h
的包含给出了 /usr/include/jasoncpp/jasoncpp/json/json.h
的完整路径,并且该文件显然没有不存在。
我认为您的 include 很可能应该是 #include <json/json.h>
,但是如果不知道 jsoncpp
包是如何安装的,它把它的 headers 放在哪里,就无法确定它期望什么标志。