在MIPS目标系统上编译protobuf-c的问题

时间:2015-01-14 10:35:14

标签: c protocol-buffers cross-compiling

这是交叉编译问题。

我创建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)
 ^

错误消息表示要使用多个符号。你有这样的经历吗?

1 个答案:

答案 0 :(得分:1)

我找到了原因。我用手动编译的protobuf。该版本与buildroot的protobuf版本不同。我应用了buildroot的protobuf并再次编译了proto文件。然后它奏效了。