我也遇到了这个问题,但这是因为与编译器选择(CC、CXX等)相关的导出。事实上,这会让你出错,因为gcc无法识别-Xclang。
这里是我用来尝试编译的方法。然而,似乎webrtc主干正在快速移动,最近几天它不再工作了。与你的问题和9dan的建议相关的最大变化是:你需要说你想以android(和linux)为目标,为此你需要android_tools。但现在,它不是从webrtc中提取的,你应该从铬中提取。
以下是安装过程的摘要。
系统要求:
首选至少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&目标武器系统所需的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/thred_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
/*=>在不同的实验之后,我使用了上面的命令,但我想从一个非常干净的安装来看,这不是绝对必要的。无论如何,如果完成了,应该在后面使用命令“./build/install-build-deps.sh--arm”,以便交换一些跨编译器包
(主要是为了保持安装了g++-arm-linux-gnueabihf和gcc-arm-linux-GNUabihf)
*/
./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标志等)。似乎它们不再有用,因为吉普赛文件会自动调整这些设置!对我来说,避免它们是获得配置和开始编译工作的唯一途径。
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:chromium/src/thred_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包装器为目标时,出现了一个相对链接问题,您可以得到类似的结果:
正在从gyp文件更新项目。。。
/bin/sh:../..//build/linux/pkg-config包装器:没有这样的文件或目录
吉普赛人:呼叫'../..//build/linux/pkg-config wrapper“/media/workspace/lib/webrtc/trunk/arm-sysroot”“arm”--libs-only-L--libs-only其他nss返回退出状态127。在尝试加载trunk/all.yp时加载trunk/all.gyp的依赖项
错误:命令/usr/bin/python-trunk/build/gypt_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配置行中的相关相对路径部分(在找到的每个文件的开头:
'pkg-config':'trunk/build/linux/pkg-config wrapper“<(sysroot)”“<(target_arch)”',
gclientrunhooks—强制
最后编译步骤
cd trunk
ninja -C out/Release/
ninja -C out/Debug/ // if required
一个想法:sudo apt-get安装gcc arm linux androidabi
您应该以第三方/android_tools/ndk/platforms/androidXXX/arch-arm/usr/include/sys为目标/
//如果clang有问题,可以使用此附加选项取消激活它(之后重新运行gclien runhooks)
export GYP_DEFINES="$GYP_DEFINES clang=0"