[英]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.