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

в 15:59, , рубрики: c++, eclipse, Google API, Google Code, Ubuntu 13.10, WebRTC, метки: , , , ,

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

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

Ссылки

Автор: udaf

Источник


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js