Проблема с компиляцией WebRTC и boost :: uuid из-за проблемы переопределения X509. Где я должен создать проблему?

#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.

Решение:

  1. Я могу использовать что-то другое, кроме boost:: uuid

  2. Я могу добавить в файл 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.