...

четверг, 28 ноября 2013 г.

[Из песочницы] Настройка WebRTC + Eclipce 4.3 + ubuntu 13.10

Добрый день, хабрапользователи!

Выкладываю небольшую шпаргалку по настройке WebRTC + Eclipce 4.3 + ubuntu 13.10. Это может быть полезно тем, кто решил попробовать себя в написании кода на С++ для webrtc.


Скажу сразу, что у Google есть неплохая документация для того, чтобы настроить среду программирования и начать пользоваться. Но к сожалению, у меня каждый раз уходит очень много времени на установку всего этого. Не каждый же день приходится устанавливать все по новому. Поэтому решил поделиться опытом, может кому-то она поможет сэкономить пару суток. На ubuntu до версии 12.10 почти всегда все ставилось хорошо и сразу начинало работать. Но недавно вышла версия 13.10 и тут начались еще большие проблемы. На установку гугл-кода пришлось потратить пол-дня. А что делать, тому кто только начал разбираться?


Получение кода




Итак, начнем. Первым делом нужно установить depot_tools

$ mkdir ~/webrtc
$ cd ~/webrtc
$ wget https://src.chromium.org/svn/trunk/tools/depot_tools.zip




Далее распаковывем скаченный архив в этот же каталог. И теперь нам нужно прописать пути к этой папке:

$ export PATH="$PATH":/home/username/webrtc/depot_tools
$ export CHROMIUM_ROOT = /home/username/webrtc/ #Не знаю правда зачем, но у меня сейчас так. Может и не нужно




И заодно дабавляем тоже самое в свой .bashrc, чтобы после перезагрузки переменные восстанавливались:

$ sudo nano ~/.bashrc




Добавляем те же самые строки. Конечно же «username» нужно заменить на свое имя пользователя:

export PATH="$PATH":/home/username/webrtc/depot_tools
export CHROMIUM_ROOT = /home/username/webrtc




Далее проверяем все ли правильно сделано:

$ gclient --version
gclient.py 0.7




Если верно, то должны увидеть версию клиента. Если нет, то скорее всего не установлен python. Нужно установить его.

Итак, gclient заработал и теперь нужно скачать исходники. Возвращаемся в директорию webrtc и скачиваем:

$ gclient config http://webrtc.googlecode.com/svn/trunk
$ gclient sync --force




Скачиваться будет долго. После того как закачалось, нужно установить gyp:

$ sudo apt-get install gyp




Установили gyp, переходим к установке необходимых требований для компиляции исходников. Для этого в скаченной нами ранне папке есть скрипт install-build-deps.sh. Запускаем его:

$ sudo ~/webrtc/trunk/build/install-build-deps.sh




И нам показывают неприятное сообщение: ERROR: Only Ubuntu 12.04 (precise) through 13.04 (raring) are currently supported. Не беда, апгрейдим скрипт. Находим строку 55 приводим ее к такому виду:

ubuntu_versions="12\.04|12\.10|13\.04|13\.10"




Заново запускаем скрипт install-build-deps.sh. Начнется установка необходимых программ и библиотек.

Теперь находясь в директории ~/webrtc/ запускаем gclient с другими парамерами:

$ gclient runhooks --force




Если появилась ошибка:

File "<string>", line 1, in <module> AssertionError: Point $JAVA_HOME or the java_home gyp variable to a directory containing include/jni.h! gyp: Call to 'python -c "import os; dir=os.getenv('JAVA_HOME', '/usr/lib/jvm/java-6-sun'); assert os.path.exists(os.path.join(dir, 'include/jni.h')), 'Point \$JAVA_HOME or the java_home gyp variable to a directory containing include/jni.h!'; print dir"' returned exit status 1.


То устанавливаем openjdk-6-jdk и прописываем пути:



$ sudo apt-get install openjdk-6-jdk
$ sudo ln -s /usr/lib/jvm/java-6-openjdk-amd64 /usr/lib/jvm/java-6-sun
$ export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd64
$ echo "export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd64" >> ~/.bashrc




На всякий случай добавляем, для того чтобы у нас сгенерировался Makefile:

$ echo "export GYP_GENERATORS=make" >> ~/.bashrc




Запускаем последний раз

$ gclient sync --force
$ gclient runhooks --force




И убеждаемся, что был создан Makefile в директории ~/webrtc/trunk/

Импорт в Eclipse и компиляция




Теперь можно запускать Eclipse и импортировать проект по этой инструкции: LinuxEclipseDev (Раздел «Install the C Development Tools (»CDT")")

Теперь, когда создали проект, пробуем его собрать.
Ошибка 1



У меня самая первая ошибка показала строки, содержащие:

narrowing conversion of ‘rate’ from ‘int’ to ‘uint32_t []

Для этого изменил файл webrtc/modules/rtp_rtcp/interface/rtp_payload_registry_unittest.cc, в нем функцию:

ModuleRTPUtility::Payload* ExpectReturnOfTypicalAudioPayload(
uint8_t payload_type, int rate)




на

ModuleRTPUtility::Payload* ExpectReturnOfTypicalAudioPayload(
uint8_t payload_type, uint32_t rate)


Ошибка 2



В следющей ошибке было:

... -Werror=extra ...

Файл /webrtc/trunk/webrtc/build/common.gypi у

Удалить строку 179

179: '-Wextra',




Файл /webrtc/trunk/build/common.gypi

Строка 3875

Изменить

3875: 'GCC_TREAT_WARNINGS_AS_ERRORS': 'YES', # -Werror




На

3875: 'GCC_TREAT_WARNINGS_AS_ERRORS': 'NO', # -Werror




И чуть ниже строка 3882, удалить ее:

3882: '-Wextra',




Ошибка 3



Сообщение вроде этого:

/webrtc/talk/app/webrtc/java/jni/peerconnection_jni.cc:113:7: note: in definition of macro ‘CHECK’

Добавляем в файл /webrtc/talk/app/webrtc/java/jni/peerconnection_jni.cc:

#include <unistd.h>




Ошибка n



Дальше уже не стал исправлять ошибки компилятора в unittest-ах гугла и вообще выклчил их компиляцию в файле webrtc/trunk/all.gyp.

#'talk/libjingle_tests.gyp:*',


В итоге, в папке /home/udaf/rabbit/webrtc/trunk/out/Debug/ появились скомпилированные примеры, среди которых набольший интерес представляют: peerconnection_client и peerconnection_server


Коротко о Gyp




Гугл-код для компиляции использует gyp. В .gyp файлах можно управлять компиляцией приложений. Например можно подключить сторонние библиотеки к своему коду вот так:

'cflags': [
'-I/usr/local/include -I/usr/local/include/cppconn -fexceptions',
],
'link_settings': {
'ldflags': [
'<!@(pkg-config --libs gtk+-2.0 gmodule-2.0 gthread-2.0 libavcodec libavformat libavutil libswscale)',
'-lmysqlcppconn'
],
'libraries': [
'-ldl',
'-lmysqlcppconn'
],
},


Ссылки




This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers.


Комментариев нет:

Отправить комментарий