#c #boost #webrtc #boringssl
#c #boost #webrtc #boringssl
Вопрос:
Я экспериментирую с WebRTC и наткнулся на досадную проблему. При использовании обоих:
BoringSSL (который предназначен third_party
для WebRTC) и boost:: uuid Я не могу скомпилировать свое решение из-за проблемы переопределения X509.
Проблема:
BoringSSL определяет X509 самостоятельно, поэтому, когда я связываю wincrypt.h через boost::uuid, который определяет его сам по себе, возникает проблема переопределения. Эта проблема будет возникать каждый раз, когда вы попытаетесь использовать wincrypt.h
или любой другой third_party
, который зависит от него вместе с WebRTC.
Решение:
-
Я могу использовать что-то другое, кроме boost:: uuid
-
Я могу добавить в файл BoringSSL
base.h
#undef
макросы предварительной обработки:
#ifdef CRYPT
#undef X509_NAME
#undef X509_CERT_PAIR
#undef X509_EXTENSIONS
#endif
Таким образом, вы можете использовать CMake в своем проекте
add_definitions(-DCRYPT)
и проблема будет немедленно решена. Имя флага не имеет значения, просто пример.
Мое второе решение предпочтительнее, и я бы хотел, чтобы оно было включено в дальнейшие версии BoringSSL для WebRTC. На веб-сайте BoringSSL есть информация, в которой указано:
Программы отправляют свои собственные копии BoringSSL, когда они его используют, и мы обновляем все по мере необходимости при принятии решения о внесении изменений в API. Это позволяет нам в основном избегать компромиссов во имя совместимости. Это работает для нас, но может не сработать для вас.
Мои вопросы:
Означает ли эта цитата, что с WebRTC поставляется какая-то уникальная версия BoringSSL?
Если да, то куда я должен направить свою проблему? Я хотел бы внести свой вклад, чтобы это помогло кому-то еще в будущем, но я не уверен, куда, в репозиторий WebRTC? Для BoringSSL?
Заранее спасибо, что прояснили это для меня.
Ответ №1:
Boost.Asio полагается на библиотеку OpenSSL. Неудивительно, что OpenSSL и BoringSSL несовместимы. Использование #ifdef CRYPT
предлагаемого вами гипса может на самом деле скрыть гораздо более серьезные проблемы с несовместимостью. Я считаю, что правильным способом было бы скомпилировать WebRTC с OpenSSL или использовать BoringSSL для всего вашего проекта, точно так же, как это сделал nghttp2.
Комментарии:
1. Большое вам спасибо за ваш вклад. Тогда я продолжу использовать OpenSSL для WebRTC.