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