devshell环境和bitbake任务环境的区别?

问题描述 投票:0回答:1

我已经将 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。

linux yocto bitbake openembedded protoc
1个回答
-1
投票

@ozimki - 你解决了这个问题吗?我目前在使用不同的二进制文件时遇到了同样的问题,并经历了相同的故障排除步骤。

© www.soinside.com 2019 - 2024. All rights reserved.