Intereting Posts

Библиотека 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/powerpclinux/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: Используя это, мы можем добавить путь поиска для компилятора.

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

    Прежде всего, это не проблема с 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 .

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

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

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

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