Как собрать gRPC с OpenSSL вместо BoringSSL

#c #grpc

#c #grpc

Вопрос:

В моем проекте используется MySQL connector, который использует OpenSSL в качестве своей зависимости. Я интегрировал gRPC с моим проектом, используя fetchContent, с OpenSSL, установленным в моей системе. Но он все еще использует BoringSSL.

Ответ №1:

Добавьте их в свой CMakeList.txt

 set(gRPC_SSL_PROVIDER package)
  

Комментарии:

1. В качестве альтернативы вы можете добавить -DgRPC_SSL_PROVIDER=package в качестве параметра командной строки при вызове cmake . Именно так gRPC описывает построение библиотек gRPC. Это способ задать дополнительные параметры без изменений в исходных текстах.

Ответ №2:

gRPC предлагает два способа получения своих зависимостей: с помощью add_subdirectory (я не большой поклонник этого способа) и с find_package (это мой любимый).

Как описано здесь:

 # Providers for third-party dependencies (gRPC_*_PROVIDER properties):
# "module": build the dependency using sources from git submodule (under third_party)
# "package": use cmake's find_package functionality to locate a pre-installed dependency
  

Итак, чтобы использовать вашу собственную библиотеку SSL, лучший способ — это:

  1. Убедитесь, что gRPC использует find_package , с -DgRPC_SSL_PROVIDER=package .
  2. Убедитесь, что ваша библиотека SSL будет найдена find_package . Либо потому, что он установлен в масштабах всей системы, либо с помощью, -DCMAKE_PREFIX_PATH чтобы помочь find_package его найти.

Вот пример извлечения и построения gRPC и его зависимостей из исходных текстов. Обратите особое внимание на эту строку, где gRPC предписывается использовать режим «пакет».

Я бы не советовал добавлять set(gRPC_SSL_PROVIDER package) в ваш CMakeLists.txt . Это не должно беспокоить CMakeLists вашего проекта, следовательно, лучше передать это как команду ( -DgRPC_SSL_PROVIDER=package ).

Ответ №3:

Мы используем gRPC путем компиляции исходного кода. Возникла проблема (ошибка сегмента приложения), из-за которой потребовалось отключить BoringSSL для gRPC и использовать OpenSSL, установленный в системе. Есть много предложений. Но тот, который сработал для меня, приведен ниже.

 cmake -DgRPC_SSL_PROVIDER=OpenSSL . amp;amp; make amp;amp; make install
  

Комментарии:

1. Это неправильно, смотрите здесь: github.com/grpc/grpc/blob/master/CMakeLists.txt#L69-L71 Это должно быть -DgRPC_SSL_PROVIDER=module или -DgRPC_SSL_PROVIDER=package