Проблема компиляции WebRTC и boost :: uuid из-за проблемы переопределения X509. Где я должен создать вопрос? - PullRequest
1 голос
/ 11 апреля 2019

Я экспериментирую с 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 Ответ

1 голос
/ 12 апреля 2019

Boost.Asio использует библиотеку OpenSSL.Не должно быть сюрпризом, что OpenSSL и BoringSSL не совместимы.Помещение штукатурки #ifdef CRYPT, которую вы предлагаете, может фактически поставить под ковер гораздо более серьезные проблемы несовместимости.Я считаю, что правильным способом было бы скомпилировать WebRTC с OpenSSL или использовать BoringSSL для всего вашего проекта, точно так же, как nghttp2 сделал это .

...