Ошибка компиляции protobuf при сборке grpc c++

Я пытаюсь собрать gRPC C++ с помощью bazel, как в руководстве https://github.com/grpc/grpc/blob/master/BUILDING.md но у меня есть эта ошибка

PS D:\programming\cpp\grpc> bazel build --enable_bzlmod=false :all
Starting local Bazel server and connecting to it...
DEBUG: C:/users/oleg0/_bazel_oleg0/7mt2iksj/external/com_google_protobuf/bazel/system_python.bzl:230:14: WARNING: no system python available, builds against system python will fail
WARNING: C:/users/oleg0/_bazel_oleg0/7mt2iksj/external/google_cloud_cpp/google/cloud/BUILD.bazel:53:15: in config_setting rule @google_cloud_cpp//google/cloud:enable_opentelemetry_valid-transition: target '@google_cloud_cpp//google/cloud:enable_opentelemetry_valid-transition' depends on deprecated target '@google_cloud_cpp//:enable-experimental-opentelemetry': this flag is now GA, please use //:enable_opentelemetry instead.
WARNING: C:/users/oleg0/_bazel_oleg0/7mt2iksj/external/google_cloud_cpp/google/cloud/BUILD.bazel:62:15: in config_setting rule @google_cloud_cpp//google/cloud:disable_opentelemetry: target '@google_cloud_cpp//google/cloud:disable_opentelemetry' depends on deprecated target '@google_cloud_cpp//:enable-experimental-opentelemetry': this flag is now GA, please use //:enable_opentelemetry instead.
INFO: Analyzed 186 targets (214 packages loaded, 6683 targets configured).
INFO: Found 186 targets...
ERROR: C:/users/oleg0/_bazel_oleg0/7mt2iksj/external/com_google_protobuf/src/google/protobuf/compiler/rust/BUILD.bazel:50:11: Compiling src/google/protobuf/compiler/rust/accessors/unsupported_field.cc [for tool] failed: (Exit 2): cl.exe failed: error executing command (from target @com_google_protobuf//src/google/protobuf/compiler/rust:accessors) C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64\cl.exe /nologo /DCOMPILER_MSVC /DNOMINMAX /D_WIN32_WINNT=0x0601 /D_CRT_SECURE_NO_DEPRECATE ... (remaining 67 arguments skipped)
unsupported_field.cc
external/com_google_protobuf/src/google/protobuf/compiler/rust/accessors/unsupported_field.cc(9): fatal error C1083: google/protobuf/compiler/rust/accessors/accessor_generator.h: No such file or directory,
ERROR: D:/programming/cpp/grpc/src/proto/grpc/reflection/v1alpha/BUILD:25:19 Compiling src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.cc failed: (Exit 2): cl.exe failed: error executing command (from target @com_google_protobuf//src/google/protobuf/compiler/rust:accessors) C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64\cl.exe /nologo /DCOMPILER_MSVC /DNOMINMAX /D_WIN32_WINNT=0x0601 /D_CRT_SECURE_NO_DEPRECATE ... (remaining 67 arguments skipped)
INFO: Elapsed time: 34.995s, Critical Path: 3.65s
INFO: 9 processes: 9 internal.
FAILED: Build did NOT complete successfully

базель 6.4.0 грпк v1.62.1

Что я сделал: Обновлены субмодули git submodule update --init И

setx BAZEL_VC_FULL_VERSION 16.11.34
setx BAZEL_VC "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC"

Кажется, вы не устанавливаете пакет разработки Google protobuf перед сборкой grpc.

3CxEZiVlQ 05.04.2024 18:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
224
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Прежде всего, сборка gRPC Bazel не использует подмодули git, поэтому вам не нужно их обновлять. А Protobuf недавно исправил проблему удаления ненужных целей ржавчины, но это немного странно, поскольку ни один выпущенный gRPC не использовал ни одну версию Protobuf с этой проблемой. Вы можете проверить версию Protobuf, используемую в этом случае.

Ответ принят как подходящий

Я починил это! Но я использовал Cmake вместо Bazel https://habr.com/ru/companies/infopulse/articles/265805/

  • Зайдите в папку grpc\ Third_party\protobuf\cmake и создайте там папку сборки, зайдите в нее.
  • Выполните команду cmake -G "Visual Studio 16 2019" (или вашу версию VS)
  • Откройте файл protobuf.sln, созданный на предыдущем шаге, в Visual Studio и выполните сборку (F7). На этом этапе мы получаем ценные артефакты — утилиту protoc.exe, которая нам понадобится для генерации кода сериализации/десериализации данных и файлы lib, которые понадобятся при связывании gRPC.
  • Скопируйте папку grpc\ Third_party\protobuf\cmake\build\Debug в папку grpc\ Third_party\protobuf\cmake. Еще раз папку Debug нужно скопировать на 1 уровень выше. Это какое-то несоответствие в документации gRPC и Protobuf. Protobuf говорит, что всё нужно собирать в папке сборки, но исходники проектов gRPC ничего не знают об этой папке и ищут библиотеки Protobuf прямо в grpc\ Third_party\protobuf\cmake\Debug
  • Затем перейдите в корень grpc, создайте папку cmake/build, перейдите в нее, затем создайте grpc с помощью Cmake в корневой папке grpc cmake ../.. -G «Visual Studio 16 2019»
  • Найдите файл grpc.sln и создайте его.

Я почти уверен, что ответ на проблему с Bazel — предоставить более короткий путь для выходных артефактов через: --output_base=C:\O или аналогичный. Ошибки, с которыми вы сталкиваетесь, не найдены, могут быть связаны с длиной сгенерированных путей к файлам.

Что мне помогло:

> bazel --output_base=C:\O build :all

Другие вопросы по теме