Протокол Google буферизует кросс-компиляцию - PullRequest
5 голосов
/ 27 декабря 2011

Мои проблемы использования буферов протокола 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

Ответы [ 2 ]

5 голосов
/ 29 декабря 2011

Я попытаюсь ответить на ваш второй вопрос:

Когда я кросс-компилировал библиотеку 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.

.
0 голосов
/ 08 апреля 2014

По первому вопросу, после того, как вы скомпилировали и установили библиотеку protobuf с

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

Вам необходимо добавить путь включения в / your_dir / include в ваш make-файл с флагом -I, например

-I/your_dir/include

.

...