WebRTCarmbuild设

我想用arm926ej-s处理器为我的小机器构buildwebrtc
我安装depot_tools后,我做了以下步骤:

gclient config http://webrtc.googlecode.com/svn/trunk gclient sync --force cd trunk ninja -C out/Debug 

所有工作正常,我可以运行一些二进制文件,我编译后得到。
现在,我想为我的arm机器编译。 我做了如下:

 rm -rf out export GYP_CROSSCOMPILE=1 export GYP_DEFINES="target_arch=arm arm_float_abi=hard" export CC=/path/to/my/gcc export CXX=/path/to/my/g++ export AR=/path/to/my/ar export CC_host=gcc export CXX_host=g++ gclient runhooks --force 

仍然顺利…
但是当我尝试用命令编译它时:

 ninja -C out/Debug 

我得到了很多错误,比如:

 CC obj/chromium/src/third_par...p/srtp/crypto/cipher/libsrtp.aes_cbc.o FAILED: /opt/virt2real-sdk/codesourcery/arm-2013.05/bin/arm-none-linux-gnueabi-gcc -MMD -MF obj/chromium/src/third_party/libsrtp/srtp/crypto/cipher/libsrtp.aes_cbc.od -DHAVE_STDLIB_H -DHAVE_STRING_H -DV8_DEPRECATION_WARNINGS -D_FILE_OFFSET_BITS=64 -DHAVE_INT16_T -DHAVE_INT32_T -DHAVE_INT8_T -DHAVE_UINT16_T -DHAVE_UINT32_T -DHAVE_UINT64_T -DHAVE_UINT8_T -DHAVE_STDINT_H -DHAVE_INTTYPES_H -DHAVE_NETINET_IN_H -DINLINE=inline -DCPU_CISC -DCHROMIUM_BUILD -DCR_CLANG_REVISION=214024 -DTOOLKIT_VIEWS=1 -DUI_COMPOSITOR_IMAGE_TRANSPORT -DUSE_AURA=1 -DUSE_ASH=1 -DUSE_PANGO=1 -DUSE_CAIRO=1 -DUSE_GLIB=1 -DUSE_DEFAULT_RENDER_THEME=1 -DUSE_LIBJPEG_TURBO=1 -DUSE_X11=1 -DUSE_CLIPBOARD_AURAX11=1 -DENABLE_ONE_CLICK_SIGNIN -DENABLE_PRE_SYNC_BACKUP -DUSE_XI2_MT=2 -DENABLE_REMOTING=1 -DENABLE_WEBRTC=1 -DENABLE_PEPPER_CDMS -DENABLE_CONFIGURATION_POLICY -DENABLE_NOTIFICATIONS -DUSE_UDEV -DENABLE_EGLIMAGE=1 -DENABLE_TASK_MANAGER=1 -DENABLE_EXTENSIONS=1 -DENABLE_PLUGINS=1 -DENABLE_SESSION_SERVICE=1 -DENABLE_THEMES=1 -DENABLE_AUTOFILL_DIALOG=1 -DENABLE_BACKGROUND=1 -DENABLE_GOOGLE_NOW=1 -DCLD_VERSION=2 -DCLD2_DATA_SOURCE=static -DENABLE_FULL_PRINTING=1 -DENABLE_PRINTING=1 -DENABLE_SPELLCHECK=1 -DENABLE_CAPTIVE_PORTAL_DETECTION=1 -DENABLE_APP_LIST=1 -DENABLE_SETTINGS_APP=1 -DENABLE_MANAGED_USERS=1 -DENABLE_MDNS=1 -DENABLE_SERVICE_DISCOVERY=1 -DUSE_NSS=1 -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DWTF_USE_DYNAMIC_ANNOTATIONS=1 -D_DEBUG -D_GLIBCXX_DEBUG=1 -I../../chromium/src/third_party/libsrtp/config -I../../chromium/src/third_party/libsrtp/srtp/include -I../../chromium/src/third_party/libsrtp/srtp/crypto/include -Igen -fstack-protector --param=ssp-buffer-size=4 -Werror -pthread -fno-exceptions -fno-strict-aliasing -Wno-unused-parameter -Wno-missing-field-initializers -fvisibility=hidden -pipe -fPIC -Wno-reserved-user-defined-literal -Xclang -load -Xclang /home/footniko/my/webrtcnative/trunk/tools/clang/scripts/../../../third_party/llvm-build/Release+Asserts/lib/libFindBadConstructs.so -Xclang -add-plugin -Xclang find-bad-constructs -fcolor-diagnostics -Wheader-hygiene -Wno-char-subscripts -Wno-unneeded-internal-declaration -Wno-covered-switch-default -Wstring-conversion -Wno-c++11-narrowing -Wno-deprecated-register -Wno-format -Wno-unused-result -target arm-linux-gnueabihf -march=armv7-a -no-integrated-as -mtune=generic-armv7-a -mfpu=neon -mfloat-abi=hard -mthumb --sysroot=/home/footniko/my/webrtcnative/trunk/arm-sysroot -O0 -g -funwind-tables -Wno-undefined-bool-conversion -Wno-tautological-undefined-compare -c ../../chromium/src/third_party/libsrtp/srtp/crypto/cipher/aes_cbc.c -o obj/chromium/src/third_party/libsrtp/srtp/crypto/cipher/libsrtp.aes_cbc.o arm-none-linux-gnueabi-gcc: error: unrecognized command line option '-Xclang' arm-none-linux-gnueabi-gcc: error: unrecognized command line option '-Xclang' arm-none-linux-gnueabi-gcc: error: unrecognized command line option '-Xclang' arm-none-linux-gnueabi-gcc: error: unrecognized command line option '-add-plugin' arm-none-linux-gnueabi-gcc: error: unrecognized command line option '-Xclang' arm-none-linux-gnueabi-gcc: error: find-bad-constructs: No such file or directory arm-none-linux-gnueabi-gcc: error: unrecognized command line option '-fcolor-diagnostics' arm-none-linux-gnueabi-gcc: error: unrecognized command line option '-Wheader-hygiene' arm-none-linux-gnueabi-gcc: error: unrecognized command line option '-Wstring-conversion' arm-none-linux-gnueabi-gcc: error: unrecognized command line option '-target' arm-none-linux-gnueabi-gcc: error: arm-linux-gnueabihf: No such file or directory arm-none-linux-gnueabi-gcc: error: unrecognized command line option '-no-integrated-as' 

Solutions Collecting From Web of "WebRTCarmbuild设"

我也有这个问题,但是这是因为与编译器选择(CC,CXX等)相关的输出。 事实上,这使得你错误,因为-Xclang不被gcc识别。

这是我用来编译的方法。 然而,似乎webrtc主干正在快速移动,而且这些最后的日子已经不再起作用了。 与你的问题和9dan的建议有关的最大的变化:你需要说你想要的目标是Android(和Linux),为此你需要android_tools。 但现在,它不是从webrtc获取,你应该从铬。

这是安装过程的总结。

系统要求:

在至少30Gb虚拟驱动器空间和8GbRAM上选择虚拟化的Lubuntu14.04 64bit:

 _Lubuntu is fast to use when virtualized and it is based on ubuntu which is necessary since installation scripts rely on ubuntu software packages names _64bit is necessary since scripts like install-build-deps.sh expect 64bit system and install specific 32bit libraries _30Gb at least because standard (non cross compiling) webrtc requires at least 10Gb but when adding all cross compiling stuff, drive space explodes ! _8GbRAM to be able to compile and link everything 

然后,从这个主机,这里是安装过程:

基本的初步设置…假设没有任何后面讨论的变量已经被导出

首先安装必备的软件包以便能够取数据并用java来玩:

 // ensure all required depot are ready sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) main universe restricted multiverse" // install most essential packages prior to fetching sudo apt-get install openjdk-7-jdk git subversion 

初始Webrtc获取

创建一个目录来获取和去

 mkdir WebRTC cd WebRTC git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git export PATH=<location of depot_tools>:"$PATH" // example : export PATH=/home/testing/WebRTC/depot_tools:"$PATH" export JAVA_HOME=<location of Java SE 6 - JDK> // example : export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/ gclient config http://webrtc.googlecode.com/svn/trunk gclient sync --force 

注0:有时它会失败,说没有找到gcc,pkg-config等。 这通常发生在缺少大量软件包的全新安装中。 幸运的是脚本应该已经被下载了:

 trunk/built/install-build-deps.sh 

运行它来安装所有必需的软件包并重新运行

 gclient sync --force 

添加目标臂系统所需的所有必需的android sdk&ndk

 echo "target_os = ['android', 'unix']" >> .gclient gclient sync cd trunk source ./build/android/envsetup.sh export GYP_DEFINES="$GYP_DEFINES OS=android" gclient runhooks 

注1:android工具不能直接使用webrtc。 建议使用铬。 然后,在Webrtc文件夹或另一个(例如,原始位置:trunk / third_party /)。

 cd myTargetDirectory // example cd trunk/third_party/ git clone https://chromium.googlesource.com/android_tools 

一旦获取了android_tools,配置项目就可以看到它。 编辑:

 trunk/chromium/src/third_party/openmax_dl/dl/dl.gyp 

并通过在文件开始处的“变量”部分中添加以下行来添加所需的变量android_ndk_root:

 'android_ndk_root':'<WebRTCfolder>/trunk/third_party/android_tools/ndk/', example 'android_ndk_root':'/home/testing/WebRTC/trunk/third_party/android_tools/ndk/', 

你也可以在你的.bashrc中导出ANDROID_NDK_ROOT

 export ANDROID_NDK_ROOT=<WebRTCfolder>/trunk/third_party/android_tools/ndk/ example export ANDROID_NDK_ROOT=/home/testing/WebRTC/trunk/third_party/android_tools/ndk/ 

为armv7a平台准备交叉编译

 // install all necessary packages cd trunk ./build/install-build-deps.sh --arm ./build/install-build-deps-android.sh 

/ * =>在不同的实验之后,我使用了上面的命令,但是我想这不是绝对必要的。 任何情况下,如果完成,命令“./build/install-build-deps.sh –arm”应该用于交换一些交叉编译包之后(主要是为了保持g ++ – arm-linux-gnueabihf和gcc- arm-linux-gnueabihf已安装)* /

 ./build/linux/install-arm-sysroot.py export GYP_CROSSCOMPILE=1 /* => i used it but i ask myself if it is still necessary since an automatic declaration is performed later on.*/ export GYP_DEFINES="OS=linux target_arch=arm arm_version=7 arm_use_neon=1" // other options like arm_fpu=vfpv3-d16 arm_float_abi=softfp are set by default, actually, even arm_vervion=7 and use_neon=1 */ 

在这里,目标是Linux的手臂,所以这应该是足够的,但如果瞄准android,可能有必要定义以下变量

 export ANDROID_SDK_VERSION=19 export GYP_DEFINES="$GYP_DEFINES android_sdk_version=19" 

注2:以下出口经常在指南和教程中报告。 但是,使用时会带来一些问题(无法识别-Xclang标志等)。 它似乎没有更多的有用,因为gyp文件自动调整这些设置! 对我来说,避开它们是获得配置和开始编译工作的唯一途径。

 export CC=arm-linux-gnueabihf-gcc export CXX=arm-linux-gnueabihf-g++ export AR=arm-linux-gnueabihf-ar export CC_host=gcc export CXX_host=g++ 

最后,在进入最后编译步骤之前配置系统

 cd .. gclient runhooks --force cd trunk/ 

可能的错误1,解决

首先出现以下错误:=> gyp:在铬/ src / third_party / openmax_dl / dl / dl.gyp =>中的未定义变量android_ndk_root回到上一节,您肯定忘了在enlighted文件中定义android_ndk_root变量:'android_ndk_root' :'/ trunk / third_party / android_tools / ndk /',* /

潜在的错误2,解决了

当试图以trunk / build / linux / pkg-config-wrapper为目标时,会出现一个相对的链接问题,你可以得到如下的东西:更新gyp文件的项目… / bin / sh:../../ .. / build / linux / pkg-config-wrapper:没有这样的文件或目录gyp:调用'../../../build/linux/pkg-config-wrapper“/ media / workspace / lib / webrtc / trunk / arm-sysroot“”arm“–libs-only-L –libs-only-other -nss'返回退出状态127. while加载trunk / all.gyp的依赖关系时尝试加载trunk / all.gyp错误:命令/ usr / bin / python trunk / build / gyp_chromium –depth = trunk trunk / all.gyp -Dextra_gyp_flag = 0如果您想解决这个问题,请在/ media / workspace / lib / webrtc =>中返回非零退出状态1对于有这个错误的所有文件,查找错误的文件:

 grep -Ir --exclude=\*.{c,h} "../../../build/linux/pkg-config-wrapper" * 

(在每个找到的文件的开始处:'pkg-config':'trunk / build / linux / pkg-config-wrapper'<(sysroot)“”<(target_arch) “”,

gclient runhooks –force

最后的编译步骤

 cd trunk ninja -C out/Release/ ninja -C out/Debug/ // if required 

一个想法:sudo apt-get install gcc-arm-linux-androideabi你应该以third_party / android_tools / ndk / platforms / android-XXX / arch-arm / usr / include / sys /

//如果有叮当声问题,可以使用这个额外的选项去激活(重新运行gclien runhooks之后)

 export GYP_DEFINES="$GYP_DEFINES clang=0"