compiler-errors - 谷歌 Protocol Buffer 交叉编译

标签 compiler-errors cross-compiling compiler-options

我使用 Google Protocol Buffer 的问题有两个部分,一个是关于编译器选项,另一个是交叉编译。构建机器是 Power6,64 位;主机是PowerPC450,32位。海湾合作委员会 4.1.2。

第一个问题是关于编译器选项:

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

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

然后make,make check,make install,一切正常。我想我已经指定了主机,它应该包含编译需要知道的足够信息。
当我尝试编译我的代码时
/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。我谷歌了一下,没有得到任何明确的想法。如何让编译器可以使用该选项或可以找到该文件?还是我的编译命令有问题?

第二个问题是关于交叉编译。
谷歌 Protocol Buffer 的自述文件并不清楚交叉编译的确切方式。它说我必须使用 --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 Protocol Buffer ?我没有找到任何关于此的详细示例。

非常感谢,

-托尼

最佳答案

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

当我交叉编译 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

然后执行通常的 make、make check 和 make install,您需要复制到另一台机器的文件在/patch/to/built/files 中。

关于compiler-errors - 谷歌 Protocol Buffer 交叉编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8647713/

相关文章:

gcc - gcc选项中-m32、-m64和nothing之间有什么区别?

python tkinter在函数之间传递变量

C++ 错误 : expected primary expression before '*' token in constructor with parameters

c++ - Qt Creator 不构建最小项目 [-c line 0 : git]

compiler-errors - 错误交叉编译vlc Linux(Ubuntu 12.04)64以赢得64

使用 autoconf 进行交叉编译

ios - 从静态库初始化对象时,在构建过程中发生编译错误

android - 如何在Android上使用strace?

optimization - IBM XL C/C++ 等效于 #pragma GCC 优化

cuda - 如何让 nvcc CUDA 编译器进行更多优化?