Этот документ содержит подробные инструкции по сборке gRPC C++ из исходников. Обратите внимание, что он охватывает только сборку самой gRPC и предназначен для вкладчиков gRPC C++ и/или продвинутых пользователей. Другим следует следовать инструкциям для пользователей. См. инструкции Как использовать для получения руководства по добавлению gRPC в качестве зависимости в C++-приложение (существует несколько способов, и установка системы часто не является лучшим выбором).
$ [sudo] apt-get install build-essential autoconf libtool pkg-config
Если вы планируете использовать CMake
$ [sudo] apt-get install cmake
Если вы являетесь вкладчиком и планируете собирать и запускать тесты, также установите следующее:
$ # clang и библиотека C++ LLVM требуются только для сборок с санитайзерами
$ [sudo] apt-get install clang libc++-dev
На Mac вам сначала нужно установить Xcode или Командные инструменты для Xcode и затем выполнить следующую команду из терминала:
$ [sudo] xcode-select --install
Чтобы собрать gRPC из исходников, вам может потребоваться установить следующие пакеты из Homebrew:
$ brew install autoconf automake libtool shtool
Если вы планируете использовать CMake, следуйте инструкциям с https://cmake.org/download/
Совет: при сборке,
вы можете явно задать переменные окружения LIBTOOL
и LIBTOOLIZE
при запуске make
, чтобы убедиться, что используется версия,
установленная brew
:
$ LIBTOOL=glibtool LIBTOOLIZE=glibtoolize make
Для подготовки к сборке с использованием cmake + компилятора Microsoft Visual C++
PATH
(choco install nasm
) - требуется для boringssl
choco install ninja
)Перед сборкой вам нужно клонировать репозиторий gRPC на GitHub и скачать подмодули, содержащие исходный код зависимостей gRPC (это делается командой submodule
или флагом --recursive
). Используйте следующие команды для клонирования репозитория gRPC на последний стабильный тег релиза
$ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc
$ cd grpc
$ git submodule update --init
> git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc
> cd grpc
> git submodule update --init
ПРИМЕЧАНИЕ: Инструмент сборки bazel
использует другую модель для зависимостей. Вам нужно беспокоиться о скачивании подмодулей только если вы собираетесь использовать что-то другое, кроме bazel
(например, cmake
).
В мире C++ нет "стандартной" системы сборки, которая бы работала для всех поддерживаемых случаев использования и на всех поддерживаемых платформах.
Поэтому gRPC поддерживает несколько основных систем сборки, которые должны удовлетворить большинство пользователей. В зависимости от ваших потребностей
мы рекомендуем использовать bazel
или cmake
.
Bazel является основной системой сборки для gRPC C++. Если вы знакомы с использованием bazel, мы определенно можем рекомендовать его. Использование bazel обеспечит вам лучший опыт разработчика, а также более быстрые и чистые сборки.
Вам потребуется версия bazel
1.0.0 или выше для сборки gRPC.
См. Установка Bazel для инструкций по установке bazel на вашей системе.
Мы поддерживаем сборку с помощью bazel
на Linux, MacOS и Windows.
Из корня репозитория grpc
# Сборка gRPC C++
$ bazel build :all
# Запуск всех тестов C/C++
$ bazel test --config=dbg //test/...
ПРИМЕЧАНИЕ: Если вы используете Bazel 7 или новее и работаете с gRPC, вам нужно отключить bzlmod. Это связано с тем, что gRPC пока не полностью совместим с bzlmod. Для этого добавьте --enable_bzlmod=false к вашим командам Bazel.
ПРИМЕЧАНИЕ: Если вы являетесь поддержкой gRPC и у вас есть доступ к нашему тестовому кластеру, вы должны использовать нашу удаленную среду выполнения gRPC для значительного улучшения скорости сборки и тестирования (и множества других очень полезных функций).
Запустите из директории grpc после клонирования репозитория с --recursive или обновления подмодулей.
$ mkdir -p cmake/build
$ cd cmake/build
$ cmake -DCMAKE_CXX_STANDARD=17 ../..
$ make
Если вы хотите собрать динамические библиотеки (файлы .so
), запустите cmake
с -DBUILD_SHARED_LIBS=ON
.
При использовании генератора "Visual Studio",
cmake создаст решение (grpc.sln
), которое содержит проект VS для
каждой цели, определенной в CMakeLists.txt
(+ несколько дополнительных проектов,
добавленных автоматически cmake). После открытия решения в Visual Studio
вы сможете просматривать и собирать код.
> @rem Запустите из директории grpc после клонирования репозитория с --recursive или обновления подмодулей.
> md .build
> cd .build
> cmake -G "Visual Studio 17 2022" -DCMAKE_CXX_STANDARD=17 ..
> cmake --build . --config Release
Использование gRPC C++ в виде DLL не рекомендуется, но вы все равно можете включить его, запустив cmake
с -DBUILD_SHARED_LIBS=ON
.
Обратите внимание, что при использовании Ninja вам все равно потребуется установленный Visual C++ (часть Visual Studio) для компиляции исходников C/C++.
> @rem Запустите из директории grpc после клонирования репозитория с --recursive или обновления подмодулей.
> cd cmake
> md build
> cd build
> call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x64
> cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 ..\..
> cmake --build .
Использование gRPC C++ в виде DLL не рекомендуется, но вы все равно можете включить его, запустив cmake
с -DBUILD_SHARED_LIBS=ON
.
Поддержка сборки DLL на Windows осуществляется на основе "наилучших усилий", и мы не рекомендуем использовать gRPC C++ в виде DLL, так как существуют известные недостатки работы C++ DLL на Windows. Например, нет стабильного C++ ABI, и вы не можете безопасно выделять память в одном DLL и освобождать ее в другом и т.д.
Тем не менее, мы не активно запрещаем сборку DLL на Windows (она может быть включена в cmake с -DBUILD_SHARED_LIBS=ON
), и вы можете использовать сборки DLL на свой страх и риск.
Чтобы избежать ошибок сборки при сборке gRPC и его зависимостей (особенно с версии gRPC C++ 1.70),
убедитесь, что все сборки CMake используют одну и ту же версию C++ (по крайней мере C++17).
Это важно, потому что gRPC C++ 1.70 требует как минимум C++17, а Abseil, зависимость gRPC,
предоставляет разные API в зависимости от версии C++.
Например, absl::string_view
реализован по-разному до и после C++17.
Использование консистентной версии C++ предотвращает несоответствия и обеспечивает совместимость по всему проекту.
Система сборки CMake gRPC имеет два варианта для обработки зависимостей. CMake может собирать зависимости вместе с gRPC или может искать библиотеки, уже установленные на вашей системе, и использовать их для сборки gRPC.
Это поведение контролируется переменными CMake gRPC_<depname>_PROVIDER
,
например, gRPC_CARES_PROVIDER
. Опции, которые эти переменные принимают, следующие:
CMAKE_INSTALL_PREFIX
.Например, если вы установите gRPC_CARES_PROVIDER=module
, то CMake соберет
c-ares перед сборкой gRPC. С другой стороны, если вы установите
gRPC_CARES_PROVIDER=package
, то CMake будет искать копию c-ares,
уже установленную на вашей системе, и использовать ее для сборки gRPC.
Выполните следующие шаги для установки gRPC с помощью CMake.
-DgRPC_INSTALL=ON
install
Цель установки контролируется переменной
CMAKE_INSTALL_PREFIX
.
Если вы используете CMake v3.13 или новее, вы можете собрать зависимости gRPC в режиме "module" и установить их вместе с gRPC за один шаг. Пример
Если вы собираете gRPC < 1.27 или используете CMake < 3.13, вам нужно выбрать режим "package" (вместо режима "module") для зависимостей. Это означает, что вам нужно иметь внешние копии этих библиотек, доступные на вашей системе. Этот пример показывает, как установить зависимости с помощью cmake перед установкой самого gRPC.
# ПРИМЕЧАНИЕ: все зависимости gRPC должны быть уже установлены
$ cmake ../.. -DgRPC_INSTALL=ON \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_STANDARD=17 \
-DgRPC_ABSL_PROVIDER=package \
-DgRPC_CARES_PROVIDER=package \
-DgRPC_PROTOBUF_PROVIDER=package \
-DgRPC_RE2_PROVIDER=package \
-DgRPC_SSL_PROVIDER=package \
-DgRPC_ZLIB_PROVIDER=package
$ make
$ make install
Вы можете использовать CMake для кросс-компиляции gRPC для другой архитектуры. Для этого вам сначала нужно собрать protoc
и grpc_cpp_plugin
для архитектуры хоста. Эти инструменты используются во время сборки gRPC, поэтому нам нужны исполняемые файлы,
которые можно запускать нативно.
Вероятно, вам потребуется установить тулчейн для платформы, на которую вы собираетесь кросс-компилировать. После этого вы можете написать файл тулчейна, чтобы указать CMake, где находятся компиляторы и системные инструменты, которые будут использоваться для этой сборки.
Этот файл тулчейна указывается CMake путем установки переменной CMAKE_TOOLCHAIN_FILE
.
$ cmake ../.. -DCMAKE_TOOLCHAIN_FILE=path/to/file
$ make
Прилагается максимум усилий для увеличения ревизии SONAME при нарушении ABI. Хотя изменение SONAME явно указывает на несовместимость ABI, никаких жестких гарантий относительно какой-либо стабильности ABI в рамках одной версии SONAME дать нельзя.
ПРИМЕЧАНИЕ: make
ранее был основной системой сборки gRPC, но мы больше не рекомендуем его использовать. Вместо этого следует использовать bazel
или cmake
. Файл Makefile
предназначен только для внутреннего использования и не предназначен для публичного использования.
Из корня репозитория grpc
$ make
ПРИМЕЧАНИЕ: если на Linux возникает ошибка типа 'aclocal-1.15: command not found', которая может произойти, если вы запустили 'make' до установки предварительных требований, попробуйте следующее:
$ git clean -f -d -x && git submodule foreach --recursive git clean -f -d -x
$ [sudo] apt-get install build-essential autoconf libtool pkg-config
$ make
protoc
По умолчанию gRPC использует протокол буферов,
вам потребуется компилятор protoc
для генерации кода сервера и клиента.
Если вы компилируете gRPC из исходников, как описано выше, Makefile автоматически попытается скомпилировать protoc
в third_party, если вы клонировали репозиторий рекурсивно и обнаружит, что у вас еще нет установленного компилятора protoc
.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )