1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-grpc-framework

Клонировать/Скачать
BUILDING.md 19 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 28.06.2025 08:23 b4cba57

gRPC C++ - Сборка из исходников

Этот документ содержит подробные инструкции по сборке gRPC C++ из исходников. Обратите внимание, что он охватывает только сборку самой gRPC и предназначен для вкладчиков gRPC C++ и/или продвинутых пользователей. Другим следует следовать инструкциям для пользователей. См. инструкции Как использовать для получения руководства по добавлению gRPC в качестве зависимости в C++-приложение (существует несколько способов, и установка системы часто не является лучшим выбором).

Предварительные требования

Linux

 $ [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

MacOS

На 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

Windows

Для подготовки к сборке с использованием cmake + компилятора Microsoft Visual C++

  • Установите Visual Studio 2022 или более позднюю версию (будет использоваться компилятор Visual C++).
  • Установите Git.
  • Установите CMake.
  • Установите nasm и добавьте его в PATH (choco install nasm) - требуется для boringssl
  • (Необязательно) Установите Ninja (choco install ninja)

Клонирование репозитория (включая подмодули)

Перед сборкой вам нужно клонировать репозиторий gRPC на GitHub и скачать подмодули, содержащие исходный код зависимостей gRPC (это делается командой submodule или флагом --recursive). Используйте следующие команды для клонирования репозитория gRPC на последний стабильный тег релиза

Unix

 $ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc
 $ cd grpc
 $ git submodule update --init

Windows

> 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 (рекомендуется)

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 для значительного улучшения скорости сборки и тестирования (и множества других очень полезных функций).

Сборка с помощью CMake

Linux/Unix, Использование Make

Запустите из директории grpc после клонирования репозитория с --recursive или обновления подмодулей.

$ mkdir -p cmake/build
$ cd cmake/build
$ cmake -DCMAKE_CXX_STANDARD=17 ../..
$ make

Если вы хотите собрать динамические библиотеки (файлы .so), запустите cmake с -DBUILD_SHARED_LIBS=ON.

Windows, Использование Visual Studio 2022 или более поздней версии

При использовании генератора "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.

Windows, Использование Ninja (более быстрая сборка).

Обратите внимание, что при использовании 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

Поддержка сборки DLL на Windows осуществляется на основе "наилучших усилий", и мы не рекомендуем использовать gRPC C++ в виде DLL, так как существуют известные недостатки работы C++ DLL на Windows. Например, нет стабильного C++ ABI, и вы не можете безопасно выделять память в одном DLL и освобождать ее в другом и т.д.

Тем не менее, мы не активно запрещаем сборку DLL на Windows (она может быть включена в cmake с -DBUILD_SHARED_LIBS=ON), и вы можете использовать сборки DLL на свой страх и риск.

  • вас предупредили о важных недостатках, и некоторые вещи могут вообще не работать или будут сломаны необычными способами.
  • у нас нет обширного тестирования сборок DLL (чтобы избежать затрат на поддержку, увеличения времени тестирования и т.д.), поэтому могут возникать регрессии / проблемы со сборкой.

Консистентная версия стандартного C++

Чтобы избежать ошибок сборки при сборке 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. Опции, которые эти переменные принимают, следующие:

  • module - собирать зависимости вместе с gRPC. Исходный код получается из подмодулей git gRPC.
  • package - использовать внешние копии зависимостей, уже доступные на вашей системе. Они могут быть установлены через ваш диспетчер пакетов системы или, возможно, вы предварительно установили их с помощью CMake с опцией 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 при сборке cmake

Прилагается максимум усилий для увеличения ревизии SONAME при нарушении ABI. Хотя изменение SONAME явно указывает на несовместимость ABI, никаких жестких гарантий относительно какой-либо стабильности ABI в рамках одной версии SONAME дать нельзя.

Сборка с помощью make на UNIX-системах (устаревшая)

ПРИМЕЧАНИЕ: 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-grpc-framework.git
git@api.gitlife.ru:oschina-mirror/mirrors-grpc-framework.git
oschina-mirror
mirrors-grpc-framework
mirrors-grpc-framework
master