devshell环境和bitbake任务环境之间有何区别?

时间:2019-09-04 12:48:49

标签: linux yocto bitbake openembedded protoc

我已经将雏菊内置的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上放开开放式雏菊。

0 个答案:

没有答案