繁体   English   中英

Google协议缓冲区交叉编译

[英]Google protocol buffers cross compiling

我使用Google协议缓冲区的问题有两个部分,一个是关于编译器选项,另一个是交叉编译。 构建机器是64位Power6; 主机是32位的PowerPC450。 Gcc 4.1.2。

第一个问题与编译器选项有关:

我正在尝试在需要交叉编译的PowerPC机器上安装Google协议缓冲区。 构建机器是64位Power6; 主机是32位的PowerPC450。 首先,我尝试直接在构建机器上安装,并带有告诉编译器要使用的选项:

./configure --prefix=/home/where_to_install --host=powerpc-bgp-linux

然后进行制作,进行检查,进行安装,一切都很好。 我认为我已经指定了主机,其中应该包含足够的信息,需要编译知道。 当我尝试使用

/bgsys/drivers/ppcfloor/gnu-linux/powerpc-bgp-linux/bin/g++ -g -zmuldefs -Xlinker -I/home/somewhere_installed/include $sourceFile -o $fileName -L/home/somewhere_installed/lib -lz -lstdc++ -lrt -lpthread -lm -lc -lprotobuf -lprotoc msg.pb.cc

我得到了错误:

g++: unrecognized option '-zmuldefs'
In file included from zht_util.h:20,
                 from hash-phm.cpp:9:
meta.pb.h:9:42: error: google/protobuf/stubs/common.h: No such file or directory

并没有发现关于common.h变量的很多错误。

我知道这是因为编译器无法识别-zmuldefs选项,因此找不到存在的common.h文件。 我用Google搜索,但没有任何明确的主意。 如何使编译器可以使用该选项或可以找到文件? 还是我的编译命令有问题?


第二个问题是关于交叉编译。 Google协议缓冲区的自述文件尚不清楚如何交叉编译。 它说我必须使用--with-protoc = protoc来告诉configure使用哪个,好,但是在此之前,我必须为主机安装一个副本。 我首先使用命令为主机安装副本

./configure --prefix=/home/where_to_install/built --host=powerpc-bgp-linux

然后进行安装。

然后与以下代码进行交叉编译,该编译器使用与主机使用的编译器相同的编译器:

./configure --prefix=/home/tonglin/Installed/built_3 CC=/bgsys/drivers/ppcfloor/gnu-linux/bin/powerpc-bgp-linux-gcc CXX=/bgsys/drivers/ppcfloor/gnu-linux/bin/powerpc-bgp-linux-g++ --host=powerpc-bgp-linux --with-protoc=/home/where_already_Installed/built/bin/protoc

然后make并得到错误:

很多编译信息... blabla .....

collect2: ld returned 1 exit status
make[3]: *** [protoc] Error 1
make[3]: Leaving directory `/gpfs/home/somewere/src/protobuf-2.4.1/src'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/gpfs/home/somewere/src/protobuf-2.4.1/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/gpfs/home/tonglin/Installed/src/protobuf-2.4.1'
make: *** [all] Error 2

我在哪里做错了? 我也尝试在第一次安装(对于主机)中使用指定的编译器,它得到了与上面第二次安装相同的错误。 成功完成安装后,这里将有两个安装,应该使用哪个安装? 有没有人可以举一个例子说明我如何交叉编译Google协议缓冲区? 我没有找到任何有关此的详细示例。

非常感谢,

-托尼

我将尝试回答您的第二个问题:

当我交叉编译protobuf库时,我首先将其安装在主机上。 这是相对简单的:

./configure --prefix=/usr
make
make check
make install

然后,您应该在构建机器上运行它。 别忘了做一个

make distclean

之后,否则此编译的工件会干扰下一个版本。

现在,我可以通过配置为其他机器(在构建机器上)构建它

./configure --host=ppc CC=powerpc-none-linux-gnuspe-gcc CXX=powerpc-none-linux-gnuspe-g++ --with-protoc=protoc --prefix=/path/to/built/files

然后执行通常的制作,检查和安装,您需要复制到其他计算机上的文件位于/ patch / to / built / files中。

对于第一个问题,使用以下命令编译并安装protobuf库后

./configure --prefix=/your_dir
make
make check
make install

例如,您需要使用-I标志将/ your_dir / include下的include路径添加到makefile中。

-I/your_dir/include

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM