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

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

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

Последующие шаги:

  1. Добавьте строку «using 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.

Затем я попытался использовать тег «include» в команде 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: Используя это, мы можем добавить путь поиска для компилятора.

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


person Neo    schedule 20.02.2013    source источник


Ответы (3)


Во-первых, это не проблема 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.

person Vladimir Prus    schedule 22.02.2013
comment
Спасибо за ваши комментарии, поскольку вы упомянули, что это не проблема с Boost, я нашел проблему и отправил ответ. - person Neo; 23.02.2013

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

person Saqlain    schedule 20.02.2013
comment
Я нашел решение своей проблемы, проверьте решение. Спасибо за вашу помощь. - person Neo; 23.02.2013

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

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

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

person Neo    schedule 23.02.2013
comment
@VladimirPrus: У меня нет указателя на ошибку, но я нашел решение в этом сообщение - person Neo; 23.02.2013
comment
Спасибо. Похоже на специфическую ошибку Ubuntu. - person Vladimir Prus; 24.02.2013
comment
@VladimirPrus: Я не уверен, относится ли это к Ubuntu, поскольку я не использовал Ubuntu и все еще столкнулся с проблемой. Я использовал Linux, ядро ​​3.0.0-14.1-build3 +. - person Neo; 24.02.2013