Как стать автором
Обновить

Настройка WebRTC + Eclipse 4.3 + ubuntu 13.10

Время на прочтение4 мин
Количество просмотров8.5K
Добрый день, хабрапользователи!

Выкладываю небольшую шпаргалку по настройке 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 "", line 1, in 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'
			],
		},


Ссылки


Теги:
Хабы:
+14
Комментарии2

Публикации

Истории

Работа

Программист C++
132 вакансии
QT разработчик
7 вакансий

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн