2015-01-14 1 views
0

이것은 크로스 컴파일 문제입니다.MIPS 대상 시스템에서 protobuf-c를 컴파일하는 데 문제가 발생했습니다.

protobuf-c 프로젝트를 사용하여 xxxx.proto을 생성하고 C 코드를 생성했습니다. 그것은 x86 리눅스에서 성공적으로 컴파일되었습니다.

하지만 MIPS 용으로 컴파일했을 때 컴파일 오류가 발생했습니다. buildroot를 사용하여 protobuf, protobuf-c를 컴파일했습니다. 그리고 툴체인은 마법 도구입니다.

소스 코드는 아래와 같습니다.

#include <string.h> 
#include "egmessage.pb-c.h" //header file that protobuf-c generated. I never touched it. 

int main (void) 
{ 
    printf("Hello, world."); 
    return 0; 
} 

아래의 명령을 사용하여이 코드를 컴파일하려고했습니다.

mips-linux-gnu-gcc egmessage.pb-c.c test.c -o extest -I/home/vagrant/tools/buildroot-2014.11/output/staging/usr/include -lprotobuf-c 

그러면 아래와 같은 컴파일 오류가 발생합니다.

In file included from test.c:6:0: 
egmessage.pb-c.h:20:1: error: expected '=', ',', ';', 'asm' or '__attribute__' b 
efore 'typedef' 
typedef struct _ControlMessage ControlMessage; 
^ 
egmessage.pb-c.h:35:23: error: unknown type name 'ControlMessage' 
         (ControlMessage   *message); 
        ^
egmessage.pb-c.h:37:22: error: unknown type name 'ControlMessage' 
         (const ControlMessage *message); 
        ^
egmessage.pb-c.h:39:22: error: unknown type name 'ControlMessage' 
         (const ControlMessage *message, 
        ^
egmessage.pb-c.h:42:22: error: unknown type name 'ControlMessage' 
         (const ControlMessage *message, 
        ^
egmessage.pb-c.h:44:1: error: unknown type name 'ControlMessage' 
ControlMessage * 
^ 
egmessage.pb-c.h:50:23: error: unknown type name 'ControlMessage' 
         (ControlMessage *message, 
        ^
egmessage.pb-c.h:54:18: error: unknown type name 'ControlMessage' 
        (const ControlMessage *message, 
       ^
test.c:8:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int' 

int main (void) 
^ 

오류 메시지에 여러 기호를 사용하고 싶다고 말했습니다. 너 그런 경험 있니?

+0

답변이 없지만 C 바인딩 용으로 nano-pb를 사용하는 것이 좋습니다. –

+0

파일을 열고 '20 typedef '줄 바로 앞에 오는 파일을 확인하십시오. 첫 번째 오류 (및 관련된 유일한 오류)는 "이 typedef 앞에 뭔가가 없습니다"입니다. – jpa

답변

1

이유를 찾았습니다. 나는 수동으로 컴파일 된 protobuf를 사용했다. 이 버전은 buildroot의 protobuf 버전과 다릅니다. buildroot의 protobuf를 적용하고 proto 파일을 다시 컴파일했습니다. 그런 다음 효과가있었습니다.

관련 문제