Библиотека Cross Compile Boost для архитектуры PowerPC

Я пытаюсь сделать кросс-компиляцию библиотеки Boost (Thread, System) для архитектуры PowerPC. Я выполнил следующие шаги, но столкнулся с проблемами.

Я запускаю сценарий оболочки, который устанавливает мой набор инструментов. Компилятор ppc_4xx-g ++ виден в оболочке.

Последовали шаги:

  1. Добавьте строку «используя gcc: power: ppc_4xx-g ++;» в файл user-config.jam
  2. Запустите ./bootstrap.sh —prefix = BoostPowerPC в корневом каталоге.
  3. Запустите ./b2 install —build-dir = BoostPowerPC toolset = gcc-power —with-thread —with-system stage

Результат: все каталоги созданы, но компиляция не удалась. Я не могу прикрепить журнал ошибок (пожалуйста, пришлите мне свой адрес электронной почты, чтобы я мог отправить вам журнал ошибок, если вам нужно). Ниже приведен снимок журнала ошибок.

Component configuration:

- atomic                   : not building
- chrono                   : not building
- context                  : not building
- date_time                : not building
- exception                : not building
- filesystem               : not building
- graph                    : not building
- graph_parallel           : not building
- iostreams                : not building
- locale                   : not building
- math                     : not building
- mpi                      : not building
- program_options          : not building
- python                   : not building
- random                   : not building
- regex                    : not building
- serialization            : not building
- signals                  : not building
- system                   : building
- test                     : not building
- thread                   : building
- timer                    : not building
- wave                     : not building

...patience...
...found 20376 targets...
...updating 10110 targets...
common.mkdir BoostPowerPC
common.mkdir BoostPowerPC/lib
common.mkdir BoostPowerPC/boost
common.mkdir BoostPowerPC/boost/bin.v2
common.mkdir BoostPowerPC/boost/bin.v2/libs
common.mkdir BoostPowerPC/boost/bin.v2/libs/system
common.mkdir BoostPowerPC/boost/bin.v2/libs/system/build
common.mkdir BoostPowerPC/boost/bin.v2/libs/system/build/gcc-power
common.mkdir BoostPowerPC/boost/bin.v2/libs/system/build/gcc-power/release
common.mkdir BoostPowerPC/boost/bin.v2/libs/system/build/gcc-power/release/threading-multi
gcc.compile.c++ BoostPowerPC/boost/bin.v2/libs/system/build/gcc-power/release/threading-multi/error_code.o
In file included from ./boost/config/select_stdlib_config.hpp:18,
from ./boost/config.hpp:40,
from ./boost/system/config.hpp:13,
from libs/system/src/error_code.cpp:18:
/opt/ELDK/4.2/ppc_4xx/usr/include/c++/4.2.2/cstddef:50:28: error: bits/c++config.h: No such file or directory
In file included from /opt/ELDK/4.2/ppc_4xx/usr/include/c++/4.2.2/ios:43,
from /opt/ELDK/4.2/ppc_4xx/usr/include/c++/4.2.2/ostream:45,
from /opt/ELDK/4.2/ppc_4xx/usr/include/c++/4.2.2/iterator:70,
from ./boost/iterator.hpp:17,
from ./boost/operators.hpp:86,
from ./boost/system/error_code.hpp:17,
from libs/system/src/error_code.cpp:19:
.
.
.

Жалуется, что файл c ++ config.h не найден. Но файл присутствует в каталоге /opt/ELDK/4.2/usr/include/c++/4.2.2/powerpc-linux/bits

Затем я попытался использовать тег «включить» в команде b2. Но тогда я получаю сообщение об ошибке, что файл cstddef не найден, который находится в каталоге /opt/ELDK/4.2/usr/include/c++/4.2.2. Я думаю, что я переписал путь включения.

Как вы думаете, это проблема? Почему мой компилятор не может найти файл, даже если он присутствует? Какие-либо предложения ?

Обновить:

Я использовал параметры -d + 2 и -q, и ниже приведен результат.

"ppc_4xx-g++"  -ftemplate-depth-128 -O3 -finline-functions -Wno-inline -Wall -pedantic -pthread -fPIC  -DBOOST_ALL_NO_LIB=1 -DBOOST_SYSTEM_DYN_LINK=1 -DNDEBUG  -I"." -I"/opt/ELDK/4.2/ppc_4xx/usr/include" -c -o "BoostPowerPC/boost/bin.v2/libs/system/build/gcc-power/release/threading-multi/error_code.o" "libs/system/src/error_code.cpp"

Журнал компиляции:

In file included from ./boost/config/select_stdlib_config.hpp:18,
from ./boost/config.hpp:40,
from ./boost/system/config.hpp:13,
from libs/system/src/error_code.cpp:18:
/opt/ELDK/4.2/ppc_4xx/usr/include/c++/4.2.2/cstddef:50:28: error: bits/c++config.h: No such file or directory

Как мы видим, верхний каталог с требуемым файлом включен и виден для компилятора. Я даже попытался с помощью команды -L и указать корневой каталог. Это все еще не помогло.

Я проверил параметры компиляции ppc_4xx-g ++ и меня заинтересовали 2 варианта

  1. —sysroot =: это корневой каталог всех включений и библиотек, используемых компилятором.

  2. -B: Используя это, мы можем добавить путь поиска для компилятора.

Я попробовал оба, и это не помогло. Какие-либо предложения ?

0

Решение

Прежде всего, это не проблема с Boost.Build. Это означает, что будет легче исправить это, взяв последнюю команду (которая не будет выполнена), запустив ее вручную в командной строке и затем корректируя ее до тех пор, пока она не будет работать.

Как уже говорилось, вы должны затем удалить -I"/opt/ELDK/4.2/ppc_4xx/usr/include" из вашей командной строки.

Обычно компилятор должен автоматически находить свои собственные заголовочные файлы. Две возможные вещи могут помешать этому:

  1. Вы запускаете ppc_4xx-g ++ из другого места, где фактически установлены заголовки компилятора. С помощью which ppc_4xx-g++ узнаю. Вы также можете добавить -v вызову компилятора, чтобы проверить, в каких каталогах он ищет.
  2. Компилятор неправильно построен неизвестными способами. Говоря педантично, «ppc_4xx» даже не является допустимым целевым триплетом, но я не знаю, нарушит ли это компиляцию, как вы описали.

В крайнем случае, вы можете попробовать --sysroot=/opt/ELDK/4.2/ppc_4xx/usr/bin,

1

Другие решения

Ваши пути включения не являются правильными, и ошибка ясно указывает на это, поскольку каждая цепочка инструментов имеет свой собственный путь, убедитесь, что ваш путь включения для STL и т. Д. Обновлен, чтобы указывать на новое местоположение. Это должно решить вашу проблему!

0

Проблема была из-за ошибки в компиляторе. Он не мог рекурсивно искать каталоги, чтобы найти включаемые папки. Когда я вручную предоставил дополнительный путь включения, он отклонил его, указав избыточный путь включения (поскольку он был в той же структуре каталогов) — нашел это с помощью опции -v. Затем я создал каталог, создал мягкую ссылку на каталог, в котором были необходимые файлы включения, и включил этот новый каталог в мой путь включения (обходной путь). Это сработало, и я мог генерировать библиотеки.

Например: включаемые файлы присутствовали в каталоге abc / include / xyz / include, который компилятор не принимал, так как я уже указал путь abc / include. Поэтому я создал псевдоним каталога и связал его с abc / include / xyz / include. Затем я включил ./alias в качестве одного из путей включения, и это сработало. Это была известная проблема компилятора, которая исправлена ​​в более поздних версиях, я думаю, в 4.6

PS: Идея была не моя, но нашел аналогичный пост в Интернете, который мне помог.

0
По вопросам рекламы [email protected]