这是交叉编译问题。
我创建xxxx.proto并使用protobuf-c项目生成C代码。它是在x86 linux上成功编译的。
但是当我将其编译为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 :(得分:1)
我找到了原因。我用手动编译的protobuf。该版本与buildroot的protobuf版本不同。我应用了buildroot的protobuf并再次编译了proto文件。然后它奏效了。