Кросс-компиляция буферов протокола Google

Мои проблемы с использованием буферов протокола Google состоят из двух частей: одна касается параметров компилятора, другая - кросс-компиляции. Машина сборки - Power6, 64-битная; хост-машина - PowerPC450, 32 бит. Gcc 4.1.2.

Первая проблема связана с параметрами компилятора:

Я пытаюсь установить буферы протокола Google на машину PowerPC, которая требует кросс-компиляции. Машина сборки - 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. Я погуглил и не получил четкого представления. Как я могу сделать так, чтобы компилятор мог использовать эту опцию или мог найти файл? Или есть какие-то проблемы в моей команде компиляции?


Вторая проблема связана с кросс-компиляцией. В файле readme для буферов протокола Google неясно, как именно выполняется кросс-компиляция.Он сказал, что я должен использовать --with-protoc = protoc, чтобы указать configure, что использовать, хорошо, но перед этим мне нужно установить копию для хост-машины. Сначала я использую команду для установки копии для хоста

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

, затем make, make install.

Затем выполните кросс-компиляцию с использованием того же компилятора, что и на хост-машине:

./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

Затем выполните команду и получите ошибку:

много информации о компиляции ... 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? Я не нашел подробного примера по этому поводу.

Большое спасибо,

-Тони

5
задан Ulterior 27 December 2011 в 18:43
поделиться