WebRTC为手臂建设

时间:2014-09-10 11:25:18

标签: linux build arm webrtc

我想用arm926ej-s处理器为我的小机器构建webrtc。
安装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.o.d -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'

1 个答案:

答案 0 :(得分:3)

我也遇到了这个问题,但这是因为与编译器选择(CC,CXX等)相关的导出。事实上,这使你有缺陷,因为-cclang不被gcc识别。

这是我用来尝试编译的方法。然而,似乎webrtc主干正在快速移动,并且在最后几天不再有效。与你的问题和9dan的建议有关的最大变化:你需要说你想要定位android(和linux),为此你需要android_tools。但现在,它不是从webrtc获取的,你应该从chrome获得。

以下是安装过程的摘要。

系统要求:

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

_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&amp; 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:webrtc不再能直接使用android工具。建议使用铬中的一种。 然后,在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

并通过在文件开头的'variables'部分添加以下行来添加所需的变量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

/ * =&gt;在不同的实验之后,我使用了上面的命令,但我想从一个非常干净的安装不是绝对必要的。任何情况,如果完成,命令“./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 arm,所以这应该足够但是如果目标是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,已解决

首先出现以下错误: =&GT; gyp:chrome / src / third_party / openmax_dl / dl / dl.gyp中的未定义变量android_ndk_root =&GT;回到上一节,你肯定忘了在enlighted文件中定义android_ndk_root变量: 'android_ndk_root': '/中继/ 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.在尝试加载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 =&GT;如果要为出现此错误的所有文件解决此问题,请使用以下命令查找错误的文件:

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

并替换pkg配置行中的相关相对路径部分(在每个找到的文件的开头: 'pkg-config':'trunk / build / linux / pkg-config-wrapper“&lt;(sysroot)”“&lt;(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 /

//如果遇到clang问题,可以使用此附加选项取消激活(重新运行gclien runhooks之后)

export GYP_DEFINES="$GYP_DEFINES clang=0"