Как добавить родной apis webrtc в мой проект qt? - PullRequest
0 голосов
/ 04 июня 2018

У меня были проблемы в течение нескольких дней, поэтому мне действительно нужен какой-то экспорт webrtc, чтобы помочь мне.

Я успешно скомпилировал исходный код с помощью ninja, и я могу запустить пример peerconnection.Я по очереди добавляю статические библиотеки (файл .a) в свой проект qt, а затем устанавливаю путь включения для директории с исходным кодом.Он успешно компилируется, когда я вызываю createpeerconnectionfactory.Однако, когда я пытаюсь создать объект PeerConnectionInterface :: RTCConfiguration, возникает ошибка:

linux / webrtc / src / api / array_view.h: 156: ошибка: неопределенная ссылка на rtc::FatalMessage::FatalMessage(char const*, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)' linux/webrtc/src/api/array_view.h:158: error: more undefined references to rtc:: FatalMessage :: FatalMessage (char const *, int, std :: __cxx11 :: basic_string, std :: allocator> *) 'follow

Я искал файлы заголовков и обнаружил, что функция объявлена ​​в rtc_base /check.h Я прочитал BUILD.GN и обнаружил, что «проверки» встроены в librtc_base_genetic.a.Я почти уверен, что добавил эту библиотеку в свой файл qt .pro.

Я работаю с ubuntu18, QT5.10.1, и у меня есть исходный код 19 мая.Я был бы очень признателен, если бы вы могли дать мне какое-либо предложение, возможно, как это происходит или как я могу решить эту проблему.

Есть ли кто-нибудь, кто импортировал нативные библиотеки webrtc и успешно использовал apis?Мне действительно нужна чья-то помощь, чтобы преодолеть это тяжелое начало.Мой самый благодарный!

1 Ответ

0 голосов
/ 27 июня 2018

Вероятно, это из-за несовместимости ABI std::string.libstdc++ изменился со старой реализации COW на другую.Компоновщик хочет __cxx11 версию std::string, но библиотека скомпилирована с другой.

Возможное решение состоит в том, чтобы использовать libstdc++ из реальной ОС вместо libc++, которая поставляется сWebRTC родной.Чтобы сделать это, отредактируйте все параметры командной строки в файлах ниндзя, чтобы удалить такие вещи, как -nostdlib и установите для системного корня фактический root:

sed -i -re 's#obj/buildtools/third_party/libc[^[:space:]]*\s*##g' obj/webrtc.ninja
find . -type f -name \*.ninja -a ! -name \*libc++* -exec sed -i -re 's/\s*-nostd(inc|lib)\+\+//' {} \+
find . -type f -name \*.ninja -a ! -name \*libc++* -exec sed -i -re 's/\s*\S*isystem\S*libc\+\+\S*//g' {} \+
find . -type f -name \*.ninja -exec sed -i -re 's#(--sysroot=)[^[:space:]]*#\1/#' {} \+
find . -type f -name \*.ninja -exec sed -i -re 's#(-L)[^[:space:]]*-sysroot#\1#g' {} \+
find . -type f -name \*.ninja -exec sed -i -re 's#(rpath-link=)[^[:space:]]*-sysroot#\1#g' {} \+

Существуют другие проблемы, и они изменяются по мере изменения кода,Создание и использование этой библиотеки требует больших усилий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...