我已经将雏菊内置的libopencv版本升级到4.1。由于需要对旧硬件的支持,因此迁移到较新的openembedded版本将非常困难。 我在任务中运行Google protoc编译器(来自protobuf-native包)时遇到问题。
我制作了使用protoc编译文件的do_compile_prepend:
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执行的同一任务之间是有区别的。我试图比较环境变量,但我看不出有什么区别。
有人对我如何找到这两个外壳之间的区别有建议吗?另外,我可以从任务中在devshell中执行命令吗?
任何建议都会受到赞赏。
我正在薄荷16 Petra上放开开放式雏菊。