이것은 크로스 컴파일 문제입니다.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)
^
오류 메시지에 여러 기호를 사용하고 싶다고 말했습니다. 너 그런 경험 있니?
답변이 없지만 C 바인딩 용으로 nano-pb를 사용하는 것이 좋습니다. –
파일을 열고 '20 typedef '줄 바로 앞에 오는 파일을 확인하십시오. 첫 번째 오류 (및 관련된 유일한 오류)는 "이 typedef 앞에 뭔가가 없습니다"입니다. – jpa