我已经将 daisy openembedded 中的 libopencv 版本升级到 4.1。由于需要对旧硬件的支持,因此很难迁移到较新的 openembedded 版本。 我在任务中运行 google protoc 编译器(来自 protobuf-native 包)时遇到问题。
我做了do_compile_prepend,它使用protoc来编译文件:
do_compile_prepend() {
#protoc fails with PSEUDO_UNLOAD="1" set by default in the task
unset PSEUDO_UNLOAD
cd /home/s/builds/tmp/work/corei7-64-poky-linux/opencv/4.1.0-r0/build/modules/dnn /home/s/builds/tmp/sysroots/x86_64-linux/usr/bin/protoc --cpp_out /home//builds/tmp/work/corei7-64-poky-linux/opencv/4.1.0-r0/build/modules/dnn -I /home/s/builds/tmp/work/corei7-64-poky-linux/opencv/4.1.0-r0/git/modules/dnn/src/tensorflow -I /home/s/builds/tmp/work/corei7-64-poky-linux/opencv/4.1.0-r0/git/modules/dnn/src/caffe -I /home/s/builds/tmp/work/corei7-64-poky-linux/opencv/4.1.0-r0/git/modules/dnn/src/onnx /home/s/builds/tmp/work/corei7-64-poky-linux/opencv/4.1.0-r0/git/modules/dnn/src/onnx/opencv-onnx.proto
#exit task to prevent other compilations
exit 0
}
失败并出现以下错误:
[libprotobuf FATAL google/protobuf/generated_message_util.cc:818] CHECK failed: (scc->visit_status.load(std::memory_order_relaxed)) == (SCCInfoBase::kRunning):
terminate called after throwing an instance of 'google::protobuf::FatalException'
what(): CHECK failed: (scc->visit_status.load(std::memory_order_relaxed)) == (SCCInfoBase::kRunning):
根据我的调查,当它不是为与它所用的相同环境编译时,就会发生这个错误。 然而,当从 devshell 运行相同的任务时,它会成功:
bitbake opencv -c devshell
.....
#From the devshell
cd ../temp
./run.do_compile
现在根据 devshell 中的 openembedded 手册:
命令的执行就像 OpenEmbedded 构建系统正在执行它们一样。
在我的例子中,从 devshell 运行的任务和直接从 bitbake 执行的相同任务是有区别的。我试图比较环境变量,但我并没有真正看到差异。
有人建议我如何找到这两个 shell 之间的区别吗?或者我可以从我的任务中在 devshell 中执行命令吗?
非常感谢任何建议。
我在 Mint 16 Petra 上运行 openembedded daisy。
@ozimki - 你解决了这个问题吗?我目前在使用不同的二进制文件时遇到了同样的问题,并经历了相同的故障排除步骤。