0

grpc Google Assistant SDK의 새 v1alpha2를 컴파일하려고했습니다.Google Assistant SDK가 api/auth.pb.cc에서 컴파일 오류를 캐스팅 할 수 없습니다.

구글 도우미 저장소에서 make (cpp 언어 출력)를 실행했는데 내 *.pb.cc*.ob.h 개의 파일이 생성되었습니다. 그런 다음 /google/api, /google/type*.pb.cc 개의 파일을 .o 개의 파일로 컴파일하려고했는데 기본 프로젝트에 연결할 수 있습니다. (embedded_assistant.proto에는 두 가지 가져 오기 명령문이 있습니다 : import "google/api/annotations.proto"; import "google/type/latlng.proto";).

또한 /google/protobuf/google/rpc으로 컴파일하려고했습니다.

그것은 makefile에 의해 자동화하고, 나는 다음과 같은 오류를 얻을이 명령에서 : 어떤 도움

make generated command: 
g++ -c -I/usr/local/include -pthread -I./googleapis/gens -I./grpc -std=c++11 googleapis/gens/google/api/auth.pb.cc -o googleapis/gens/google/api/auth.pb.o 

output: 
googleapis/gens/google/api/auth.pb.cc:552:23: error: cannot cast '::google::protobuf::RepeatedPtrField< ::google::api::AuthenticationRule>' to its private base class 
    'google::protobuf::internal::RepeatedPtrFieldBase' 
rules_.InternalSwap(&other->rules_); 
        ^
/usr/local/include/google/protobuf/repeated_field.h:776:41: note: declared private here 
class RepeatedPtrField PROTOBUF_FINAL : private internal::RepeatedPtrFieldBase { 
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
googleapis/gens/google/api/auth.pb.cc:553:27: error: cannot cast '::google::protobuf::RepeatedPtrField< ::google::api::AuthProvider>' to its private base class 
    'google::protobuf::internal::RepeatedPtrFieldBase' 
providers_.InternalSwap(&other->providers_); 
         ^
/usr/local/include/google/protobuf/repeated_field.h:776:41: note: declared private here 
class RepeatedPtrField PROTOBUF_FINAL : private internal::RepeatedPtrFieldBase { 
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
googleapis/gens/google/api/auth.pb.cc:936:30: error: cannot cast '::google::protobuf::RepeatedPtrField< ::google::api::AuthRequirement>' to its private base class 
    'google::protobuf::internal::RepeatedPtrFieldBase' 
requirements_.InternalSwap(&other->requirements_); 
          ^
/usr/local/include/google/protobuf/repeated_field.h:776:41: note: declared private here 
class RepeatedPtrField PROTOBUF_FINAL : private internal::RepeatedPtrFieldBase { 
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
3 errors generated. 
make: *** [googleapis/gens/google/api/auth.pb.o] Error 1 

덕분에 지금, completly 새로운 멋진 휴가를 당신에게 그것을

+0

나는 이것을 쳤다. gRPC와 protobufs를 혼합하여 발생합니다. 항상 빌드중인 gRPC 브랜치가 참조하는 동일한 버전의 protobufs를 사용하십시오. – fionbio

답변

-1

I 설정의 모든 소원 공장. 나는 pathes가 틀린 약간을 포함 할지도 모른다라고 생각한다. git submodule update --init

  • 실행 make LANGUAGE=cpp
  • 컴파일와 googleapis 체크 아웃 서브 모듈에

    1. 체크 아웃 https://github.com/googleapis/googleapis
    2. CD (지금 왜 작동하지만 난 정말 몰라) ALLE subdirectorys googleapis/gens/google/api에서 *.pb.cc 파일과 googleapis/gens/google/typegoogleapis/gens/google/assistant/embedded/v1alpha2
    3. 보관함에 함께 보관하십시오.
    4. 은 해당 라이브러리를 grpcprotobuf 개의 라이브러리와 일부 샘플 코드와 함께 실행 파일에 링크합니다. protobufgrpc은 3 단계에서 여기처럼 설치해야합니다 :

    c++ v1alpha1 assistant sdk example 내가 함께이 더러운 메이크 파일을 넣어. 별로 좋지는 않지만 트릭을합니다.

    GOOGLEAPIS_GENS_PATH = ./googleapis/gens 
    
    API_CCS = $(shell find ./googleapis/gens/google/api -name '*.pb.cc') 
    
    TYPE_CCS = $(shell find ./googleapis/gens/google/type -name '*.pb.cc') 
    
    ASSISTANT_CCS = $(shell find ./googleapis/gens/google/assistant/embedded/v1alpha2 -name '*.pb.cc') 
    
    CC = g++ 
    
    FLAGS += -I$(GOOGLEAPIS_GENS_PATH) 
    FLAGS += -std=c++11 
    
    SRC = $(API_CCS) $(TYPE_CCS) $(ASSISTANT_CCS) 
    
    OBJ = $(SRC:%.cc=%.o) 
    
    PROG_FLAGS = $(FLAGS) 
    PROG_FLAGS += `pkg-config --libs grpc++ grpc` 
    PROG_FLAGS += `pkg-config --cflags --libs protobuf` 
    PROG_FLAGS += -I./googleapis/gens/google/assistant/embedded/v1alpha2 
    
    PROG_SRC = main.cpp 
    PROG_OBJ = $(PROG_SRC:%.cpp=%.o) 
    
    all: prog 
    
    prog: assistant_api.ar $(PROG_SRC) 
        $(CC) $(PROG_FLAGS) $(PROG_SRC) assistant_api.ar -o prog 
    
    assistant_api.ar: $(OBJ) 
        ar r [email protected] $? 
    
    $(OBJ): $(SRC) 
        $(CC) -c $(FLAGS) $*.cc -o $*.o 
    
    clean: 
        rm -rf *.o assistant_api.ar $(OBJ)