Я пытаюсь сделать кросс-компиляцию библиотеки Boost (Thread, System) для архитектуры PowerPC. Я выполнил следующие шаги, но столкнулся с проблемами.
Я запускаю сценарий оболочки, который устанавливает мой набор инструментов. Компилятор ppc_4xx-g ++ виден в оболочке.
Последовали шаги:
Результат: все каталоги созданы, но компиляция не удалась. Я не могу прикрепить журнал ошибок (пожалуйста, пришлите мне свой адрес электронной почты, чтобы я мог отправить вам журнал ошибок, если вам нужно). Ниже приведен снимок журнала ошибок.
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 варианта
—sysroot =: это корневой каталог всех включений и библиотек, используемых компилятором.
-B: Используя это, мы можем добавить путь поиска для компилятора.
Я попробовал оба, и это не помогло. Какие-либо предложения ?
Прежде всего, это не проблема с Boost.Build. Это означает, что будет легче исправить это, взяв последнюю команду (которая не будет выполнена), запустив ее вручную в командной строке и затем корректируя ее до тех пор, пока она не будет работать.
Как уже говорилось, вы должны затем удалить -I"/opt/ELDK/4.2/ppc_4xx/usr/include"
из вашей командной строки.
Обычно компилятор должен автоматически находить свои собственные заголовочные файлы. Две возможные вещи могут помешать этому:
which ppc_4xx-g++
узнаю. Вы также можете добавить -v
вызову компилятора, чтобы проверить, в каких каталогах он ищет.В крайнем случае, вы можете попробовать --sysroot=/opt/ELDK/4.2/ppc_4xx/usr/bin
,
Ваши пути включения не являются правильными, и ошибка ясно указывает на это, поскольку каждая цепочка инструментов имеет свой собственный путь, убедитесь, что ваш путь включения для STL и т. Д. Обновлен, чтобы указывать на новое местоположение. Это должно решить вашу проблему!
Проблема была из-за ошибки в компиляторе. Он не мог рекурсивно искать каталоги, чтобы найти включаемые папки. Когда я вручную предоставил дополнительный путь включения, он отклонил его, указав избыточный путь включения (поскольку он был в той же структуре каталогов) — нашел это с помощью опции -v. Затем я создал каталог, создал мягкую ссылку на каталог, в котором были необходимые файлы включения, и включил этот новый каталог в мой путь включения (обходной путь). Это сработало, и я мог генерировать библиотеки.
Например: включаемые файлы присутствовали в каталоге abc / include / xyz / include, который компилятор не принимал, так как я уже указал путь abc / include. Поэтому я создал псевдоним каталога и связал его с abc / include / xyz / include. Затем я включил ./alias в качестве одного из путей включения, и это сработало. Это была известная проблема компилятора, которая исправлена в более поздних версиях, я думаю, в 4.6
PS: Идея была не моя, но нашел аналогичный пост в Интернете, который мне помог.