2014-09-10 4 views
3

Я хочу построить webrtc для моей маленькой машины с процессором arm926ej.
После того как я установить depot_tools, я следующие шаги:
Здание WebRTC для кронштейна

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

Все работает отлично, и я могу запустить некоторые бинарные файлы, которые я получаю после компиляции.
Теперь я хочу скомпилировать свою ручную машину. Я следующее:

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' 
+0

need GYP_DEFINES = "OS = android"? – 9dan

+0

Я не строю для андроида. – Footniko

+0

Я так и думал, но я думаю, OS = android будет означать, что это кросс-компиляция и таргетинг мобильных процессоров. – 9dan

ответ

3

У меня также возникла эта проблема, но это было связано с экспортом, связанным с выборами компилятора (CC, CXX и т. Д.). В действительности это делает вас неисправными, поскольку -Xclang не распознается gcc.

Вот такой метод, который я пытался скомпилировать. Тем не менее, похоже, что ядро ​​webrtc движется быстро, и в последние дни оно больше не работает. Самое большое изменение, связанное с вашей проблемой и предложением 9dan: вам нужно сказать, что вы хотите настроить таргетинг на android (и linux), и для этого вам нужны android_tools. Но теперь он не извлекается из webrtc, вы должны получить его от хрома.

Вот краткое описание процесса установки.

Системные требования:

Предпочитают виртуализированная Lubuntu14.04 64bit, по крайней мере 30Гб виртуального пространства диска и 8GbRAM:

_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: когда-то он не говорил НКУ, PKG-конфигурации , и т. д. не были найдены. Это часто происходит на новой установке, где отсутствует множество пакетов. К счастью, сценарий уже должен быть загружен:

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. Рекомендуется использовать один из хрома. , то в папке Webrtc или другом (например, исходное местоположение: trunk/third_party /).

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

После того, как вы выбрали android_tools, настройте проект, чтобы увидеть его. Edit:

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/', 

вы можете также экспортировать ANDROID_NDK_ROOT в вашем .bashrc

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 

/* => после другого эксперимента, я использовал указанную выше команду, но я думаю, что это не совсем необходимо с очень чистой установки. Anycase, если это сделано, следует использовать команду «./build/install-build-deps.sh -arm», чтобы обменять некоторые пакеты кросс-компиляторов (в основном, чтобы сохранить g ++ - arm-linux-gnueabihf и gcc -arm-линукс-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 */ 

Здесь цель линукс рука так что это должно быть достаточно, но если ориентируетесь андроида, это может быть необходимо определить следующие переменные

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, решаемые

Следующая ошибка появляется первая: => лавочка: Undefined переменной android_ndk_root в хром/SRC/THIRD_PARTY/openmax_dl/дл/дл.лавочка => вернуться к предыдущему разделу, вы, конечно, забыли определить android_ndk_root переменного в подсветке файла: 'android_ndk_root': '/ ствол/THIRD_PARTY/android_tools/НКА /', */

Потенциальной ошибка 2, решено

относительная проблема появляется ссылкой при попытке целевого ствола/строить/Linux/PKG-конфигурацию-обертку, вы можете получить что-то похожее на это: Обновление проектов из Gyp файлов ... /бен/ш:. ./../../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 возвращено ненулевое состояние выхода 1 в/media/workspace/lib/webrtc => если вы хотите решить эту проблему для всех файлов, имеющих эту ошибку, ищите ошибки файлы с:

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

и заменить соответствующую относительную часть пути в упак конфигурации линии (в начале каждого из найденных файлов: «PKG-конфигурации»: «соединительном/строительство/Linux/PKG-конфигурации-обертки "< (sysroot)" "< (target_arch)",

gclient runhooks --force

заключительный этап компиляции

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

идея: Sudo APT-получить установку GCC-рычажного линукс-androideabi вы должны быть нацелены на THIRD_PARTY/android_tools/НДК/платформы/Android -XXX/арки руки/USR/включать/SYS/

// если возникают проблемы с грохотом, он может быть desactivated с этим параметром additionnal (перезапуск после gclien runhooks)

export GYP_DEFINES="$GYP_DEFINES clang=0" 
+0

Спасибо. Он работает сейчас! Теперь я пытаюсь построить для arm926ej-s (rev. 5) процессор. Знаете ли вы - возможно ли построить webrtc для armv5? Заранее спасибо. – Footniko

+0

Привет, я видел где-то, что arrmv6 был старой конфигурацией по умолчанию, теперь по умолчанию является armv7a (значения defauls: arm_version = 7 arm_use_neon = 1 arm_fpu = vfpv3-d16 arm_float_abi = softfp). с armv6, вариант с плавающей запятой будет «сложнее», arm_float_abi = hard, а vfpv3 не должен использоваться, ни неон). для armv5, возможно, он больше не поддерживается, но вы должны проверить хорошую удачу! – Alex

+0

Я просто пробовал это, но не мог даже получить начальный выбор WebRTC ... »gclient config http://webrtc.googlecode.com/svn/trunk gclient sync -force говорит:« SVN не может подключиться к репозиторию ». До этого я следовал инструкциям на странице «http://www.webrtc.org/native-code/development», но «fetch webrtc» не работает по-другому (см. Https://groups.google.com/ форум/#! тема/пообсуждать WebRTC/Dt-GRIlLVe4). Я несколько раз проходил предварительные требования к программному обеспечению, так как я могу сказать, что мой хост обновлен. Есть предположения? –

Смежные вопросы