当前位置 博文首页 > liliangnike的博客:Ninja编译webRTC失败,build stopped: subco

    liliangnike的博客:Ninja编译webRTC失败,build stopped: subco

    作者:[db:作者] 时间:2021-07-26 21:05

    webRTC的github代码的更新速度还是很快的,研究webRTC的时候,不可避免的经常git pull去拿最新的代码。更新完之后,重新编译webRTC有时候会不成功,并且始终会失败在某一个文件的编译上。

    1. 编译失败

    更新完webRTC代码,开始编译,出现以下错误:

    build stopped: subcommand failed
    

    这个应该是ninja编译经常出现的一个error,而且大多时候都是在编译产生obj/audio/audio_tests/audio_send_stream_unittest.o的时候就被Kill了。根本原因还是没有找到,如果哪位大佬知道,请指示。

    2. 如何解决

    (1)可以删掉代码库,重新clone一份,然后再编译。
    这种方法可靠,但是不现实,因为非常费时间。除非真的想重新clone一份代码。

    (2)打开编译log, 找到失败文件,单独产生目标文件

     ninja -C out/Default -v
    

    可以找到编译失败在哪一个文件,然后单独编译该文件,产生对应object file.

    我在Debian系统下,不断的失败在webrtc_voice_engine_unittest.o:

    FAILED: obj/media/rtc_media_unittests/webrtc_voice_engine_unittest.o 
    ../../third_party/llvm-build/Release+Asserts/bin/clang++ -MMD -MF obj/media/rtc_media_unittests/webrtc_voice_engine_unittest.o.d -DWEBRTC_OPUS_SUPPORT_120MS_PTIME=1 -DUSE_UDEV -DUSE_AURA=1 -DUSE_GLIB=1 -DUSE_NSS_CERTS=1 -DUSE_X11=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -DCR_CLANG_REVISION=\"n346557-4e0d9925-2\" -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D_LIBCPP_ABI_UNSTABLE -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -D_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS -D_LIBCPP_ENABLE_NODISCARD -D_LIBCPP_DEBUG=0 -DCR_LIBCXX_REVISION=375504 -DCR_SYSROOT_HASH=79a7783607a69b6f439add567eb6fcb48877085c -D_DEBUG -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DWEBRTC_ENABLE_PROTOBUF=1 -DWEBRTC_INCLUDE_INTERNAL_AUDIO_DEVICE -DRTC_ENABLE_VP9 -DHAVE_SCTP -DWEBRTC_NON_STATIC_TRACE_EVENT_HANDLERS=1 -DWEBRTC_POSIX -DWEBRTC_LINUX -DABSL_ALLOCATOR_NOTHROW=1 -DABSL_FLAGS_STRIP_NAMES=0 -DGTEST_API_= -DGTEST_HAS_POSIX_RE=0 -DGTEST_LANG_CXX11=1 -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_HAS_ABSL=1 -DHAVE_WEBRTC_VIDEO -DUNIT_TEST -I../.. -Igen -I../../third_party/abseil-cpp -I../../third_party/libyuv/include -I../../third_party/googletest/custom -I../../third_party/googletest/src/googlemock/include -I../../third_party/googletest/custom -I../../third_party/googletest/src/googletest/include -fno-strict-aliasing --param=ssp-buffer-size=4 -fstack-protector -funwind-tables -fPIC -B../../third_party/binutils/Linux_x64/Release/bin -pthread -fcolor-diagnostics -fmerge-all-constants -fcrash-diagnostics-dir=../../tools/clang/crashreports -Xclang -mllvm -Xclang -instcombine-lower-dbg-declare=0 -fcomplete-member-pointers -m64 -march=x86-64 -Wno-builtin-macro-redefined -D__DATE__= -D__TIME__= -D__TIMESTAMP__= -Xclang -fdebug-compilation-dir -Xclang . -no-canonical-prefixes -Wall -Werror -Wextra -Wimplicit-fallthrough -Wunreachable-code -Wthread-safety -Wextra-semi -Wno-missing-field-initializers -Wno-unused-parameter -Wno-c++11-narrowing -Wno-unneeded-internal-declaration -Wno-undefined-var-template -Wno-ignored-pragma-optimize -Wno-implicit-int-float-conversion -Wno-final-dtor-non-final-class -Wno-builtin-assume-aligned-alignment -Wno-deprecated-copy -Wno-non-c-typedef-for-linkage -Wno-pointer-to-int-cast -O0 -fno-omit-frame-pointer -g2 -Xclang -debug-info-kind=constructor -gsplit-dwarf -ggnu-pubnames -ftrivial-auto-var-init=pattern -fvisibility=hidden -Wheader-hygiene -Wstring-conversion -Wtautological-overlap-compare -Wc++11-narrowing -Wimplicit-fallthrough -Wthread-safety -Winconsistent-missing-override -Wundef -Wunused-lambda-capture -Wno-shorten-64-to-32 -Wno-inconsistent-missing-override -Wno-undefined-bool-conversion -Wno-tautological-undefined-compare -std=c++14 -fno-exceptions -fno-rtti -nostdinc++ -isystem../../buildtools/third_party/libc++/trunk/include -isystem../../buildtools/third_party/libc++abi/trunk/include --sysroot=../../build/linux/debian_sid_amd64-sysroot -fvisibility-inlines-hidden -Wnon-virtual-dtor -Woverloaded-virtual -c ../../media/engine/webrtc_voice_engine_unittest.cc -o obj/media/rtc_media_unittests/webrtc_voice_engine_unittest.o
    Killed 
    

    单独执行编译命令:

    ../../third_party/llvm-build/Release+Asserts/bin/clang++ -MMD -MF obj/media/rtc_media_unittests/webrtc_voice_engine_unittest.o.d -DWEBRTC_OPUS_SUPPORT_120MS_PTIME=1 -DUSE_UDEV -DUSE_AURA=1 -DUSE_GLIB=1 -DUSE_NSS_CERTS=1 -DUSE_X11=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -DCR_CLANG_REVISION=\"n346557-4e0d9925-2\" -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D_LIBCPP_ABI_UNSTABLE -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -D_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS -D_LIBCPP_ENABLE_NODISCARD -D_LIBCPP_DEBUG=0 -DCR_LIBCXX_REVISION=375504 -DCR_SYSROOT_HASH=79a7783607a69b6f439add567eb6fcb48877085c -D_DEBUG -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DWEBRTC_ENABLE_PROTOBUF=1 -DWEBRTC_INCLUDE_INTERNAL_AUDIO_DEVICE -DRTC_ENABLE_VP9 -DHAVE_SCTP -DWEBRTC_NON_STATIC_TRACE_EVENT_HANDLERS=1 -DWEBRTC_POSIX -DWEBRTC_LINUX -DABSL_ALLOCATOR_NOTHROW=1 -DABSL_FLAGS_STRIP_NAMES=0 -DGTEST_API_= -DGTEST_HAS_POSIX_RE=0 -DGTEST_LANG_CXX11=1 -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_HAS_ABSL=1 -DHAVE_WEBRTC_VIDEO -DUNIT_TEST -I../.. -Igen -I../../third_party/abseil-cpp -I../../third_party/libyuv/include -I../../third_party/googletest/custom -I../../third_party/googletest/src/googlemock/include -I../../third_party/googletest/custom -I../../third_party/googletest/src/googletest/include -fno-strict-aliasing --param=ssp-buffer-size=4 -fstack-protector -funwind-tables -fPIC -B../../third_party/binutils/Linux_x64/Release/bin -pthread -fcolor-diagnostics -fmerge-all-constants -fcrash-diagnostics-dir=../../tools/clang/crashreports -Xclang -mllvm -Xclang -instcombine-lower-dbg-declare=0 -fcomplete-member-pointers -m64 -march=x86-64 -Wno-builtin-macro-redefined -D__DATE__= -D__TIME__= -D__TIMESTAMP__= -Xclang -fdebug-compilation-dir -Xclang . -no-canonical-prefixes -Wall -Werror -Wextra -Wimplicit-fallthrough -Wunreachable-code -Wthread-safety -Wextra-semi -Wno-missing-field-initializers -Wno-unused-parameter -Wno-c++11-narrowing -Wno-unneeded-internal-declaration -Wno-undefined-var-template -Wno-ignored-pragma-optimize -Wno-implicit-int-float-conversion -Wno-final-dtor-non-final-class -Wno-builtin-assume-aligned-alignment -Wno-deprecated-copy -Wno-non-c-typedef-for-linkage -Wno-pointer-to-int-cast -O0 -fno-omit-frame-pointer -g2 -Xclang -debug-info-kind=constructor -gsplit-dwarf -ggnu-pubnames -ftrivial-auto-var-init=pattern -fvisibility=hidden -Wheader-hygiene -Wstring-conversion -Wtautological-overlap-compare -Wc++11-narrowing -Wimplicit-fallthrough -Wthread-safety -Winconsistent-missing-override -Wundef -Wunused-lambda-capture -Wno-shorten-64-to-32 -Wno-inconsistent-missing-override -Wno-undefined-bool-conversion -Wno-tautological-undefined-compare -std=c++14 -fno-exceptions -fno-rtti -nostdinc++ -isystem../../buildtools/third_party/libc++/trunk/include -isystem../../buildtools/third_party/libc++abi/trunk/include --sysroot=../../build/linux/debian_sid_amd64-sysroot -fvisibility-inlines-hidden -Wnon-virtual-dtor -Woverloaded-virtual -c ../../media/engine/webrtc_voice_engine_unittest.cc -o obj/media/rtc_media_unittests/webrtc_voice_engine_unittest.o
    

    最后,再编译webRTC

     ninja -C out/Default -v
    

    =====================================================================

    20200609更新

    一直没有时间研究真正的root cause, 自己就写了脚本,失败之后就重新开始编译,直到编译成功。

    #!/bin/bash
    
    typeset FAILED_COMPILATION_NUM=0;
    
    while :
    do
        ninja -C out/Default -j 5
        if [[ $? == 0 ]] ; then
            printf "\n\n===============================================\n"
            printf "**After ${FAILED_COMPILATION_NUM} failed, ninja compiling finished successfully.\n"
            printf "===============================================\n\n"
            break;
        else
            let FAILED_COMPLIATION_NUM+=1
            printf "\n\n===============================================\n"
            printf "**ninja compiling failed, try again automatically.\n"
            printf "===============================================\n\n"
        fi
    done
    

    **

    20200628更新

    经过长时间的观察,原因已经找到,ninja编译对于系统的内存还是有要求的,之前的虚拟机是2G + 1 CPU,现在我改成了4G + 2 CPUs, 现在不会出现错误了。

    **

    cs