Кто-нибуль пробовал компилировать boost под собственный toolset?
Не те, что входят в стандартный перечень. Исследуя документацию я натолкнулся на то, какие перемнные окружения надо
устанавливать. но благополучно их потерял и не нашел.
На вопрос зачем надо -отвечаю: есть кросс-компилятор, со всем прибамбасами, по сути он тот же gcc, но...
bjam использует, например, /usr/bin/objcopy вместо $(CROSS_COMPILE_PATH)/$(CROSS_COMPILE)-objcopy
и т.д.
как заставить его использовать нужный набор утилит? или где посмотреть как настроить toolset?
Здравствуйте, Stepkh, Вы писали:
S>Привет всем!
S>Кто-нибуль пробовал компилировать boost под собственный toolset?
S>Не те, что входят в стандартный перечень. Исследуя документацию я натолкнулся на то, какие перемнные окружения надо S>устанавливать. но благополучно их потерял и не нашел.
S>На вопрос зачем надо -отвечаю: есть кросс-компилятор, со всем прибамбасами, по сути он тот же gcc, но... S>bjam использует, например, /usr/bin/objcopy вместо $(CROSS_COMPILE_PATH)/$(CROSS_COMPILE)-objcopy S>и т.д. S>как заставить его использовать нужный набор утилит? или где посмотреть как настроить toolset?
Занимаюсь этой же проблемой, удалось достигнуть успехов в этом?
Удалось собрать под платформу mips путем подмены стандартных компиляторов, линковщиков на кросс-версии.
Однако смущает что не перебивал glibc и т.п.
Посреди сборки выскочило несколько ошибок (похоже ассемблера) но вроде собралось.
Здравствуйте, _vvs, Вы писали:
_>Здравствуйте, alexei_s, Вы писали:
>> Посреди сборки выскочило несколько ошибок (похоже ассемблера) но вроде собралось.
_>Не страшно потом пользоваться такой сборкой!?
Есть рассылка boost-build в которой я уже добивался ответа на подобный вопрос
Основная идея в том чтобы указать системе bjam путь до правильного компилера
"
Sure... But the logic that gcc.jam uses to determine which "ar" to use
goes something like this:
1. Use the ar program specified in the <archiver> option.
2. Use the "ar" program in the bin directory of the given g++.
3. Use the "ar" program in the system search path.
So if you use the common cross-compile setup of building binutils into a
tree localized for the specific target machine, i.e. in which you would
have a bin/ar and bin/g++, BBv2 would automatically work with a simple:
Все указанное выше справедливо для последнего буста с BBv2.
Кроме того для 1.33.1 (BBv1) на Linux машине с кросс компилером можно было делать так (я так делал по шагам)
1. Change dir where you unpack boost archive (for example: cd /home/sanik/boost_1_33_1
2. ./configure --with-libraries=thread
3. Edit result Makefile and add BJAM_CONFIG=-sGCC_ROOT_DIRECTORY=[path to cross compiler], e.g. BJAM_CONFIG=-sGCC_ROOT_DIRECTORY=/usr/crosstool/gcc-arm-iwmmxt/gcc-3.3.6-glibc-2.3.2/arm-linux/arm-linux
4. run “make”
HTH,
Sergey Nikulov
Здравствуйте, alexei_s, Вы писали:
_>Здравствуйте, _vvs, Вы писали:
_>>Здравствуйте, alexei_s, Вы писали:
>>> Посреди сборки выскочило несколько ошибок (похоже ассемблера) но вроде собралось.
_>>Не страшно потом пользоваться такой сборкой!?
_>страшно, поэтому вопрос по-прежнему открыт
Здравствуйте, Sanik, Вы писали:
S>Основная идея в том чтобы указать системе bjam путь до правильного компилера
я так и сделал — подменил системные:ar, as, g++, ld, ranlib на свои, все скомпилировалось, но посредине выскакивали ошибки, как я понял ассемблера
Смущает то, что есть еще кросс-библиотеки (libgcc, libstdc++ и т.п.), которые я нигде не подменял и не указывал. Т.е. по идее он мог взять стандартные системные (хотя как тогда отработал линковщик?)
вообщем вопрос библиотек как раз и волнует
Идея в том что он собирается со всеми необходимыми библиотеками.
Например, структура директорий приблизительно выглядит так
gcc-3.3.6-glibc-2.3.2
|-> arm-linux
|->arm-linux -> bin -> здесь лежат файлы без префикса — СЮДА НАДО ПРОСТО УКАЗАТЬ ПУТЬ А НЕ ПОДМЕНЯТЬ ЧТО-ТО СИСТЕМНОЕ
| |----> lib -> здесь библиотеки для target платформы
|->bin -> здесь лежат файлы вида arm-linux-gcc (т.е. с префиксом arm-linux)
...
BTW,
Вообще было бы неплохо, если бы вы указали (версию буста, и конкретные ошибки при сборке)
А то ведь я могу гадать (на кофейной гуще) до бесконечности
С уважением,
Сергей
Здравствуйте, alexei_s, Вы писали:
_>Здравствуйте, Sanik, Вы писали:
S>>Основная идея в том чтобы указать системе bjam путь до правильного компилера
_>я так и сделал — подменил системные:ar, as, g++, ld, ranlib на свои, все скомпилировалось, но посредине выскакивали ошибки, как я понял ассемблера _>Смущает то, что есть еще кросс-библиотеки (libgcc, libstdc++ и т.п.), которые я нигде не подменял и не указывал. Т.е. по идее он мог взять стандартные системные (хотя как тогда отработал линковщик?) _>вообщем вопрос библиотек как раз и волнует
Здравствуйте, Sanik, Вы писали:
S>Вы сами собирали cross compiler?
нет уже установлен
S>Например, структура директорий приблизительно выглядит так
S>gcc-3.3.6-glibc-2.3.2 S>|-> arm-linux S> |->arm-linux -> bin -> здесь лежат файлы без префикса — СЮДА НАДО ПРОСТО УКАЗАТЬ ПУТЬ А НЕ ПОДМЕНЯТЬ ЧТО-ТО СИСТЕМНОЕ S> | |----> lib -> здесь библиотеки для target платформы S> |->bin -> здесь лежат файлы вида arm-linux-gcc (т.е. с префиксом arm-linux)
да именно так
S>Вообще было бы неплохо, если бы вы указали (версию буста, и конкретные ошибки при сборке)
последняя 1.34
подмена заключалась в следующем: я временно убрал системные (g++ , ld, и т.п.) из /usr/bin, и создал вместо них симлинки на arm-linux-gcc и т.п.
после этого стандартный bjam --toolset=gcc
S>Идея в том что он собирается со всеми необходимыми библиотеками.
т.е. при сборке буста кросс-версии ar, as, g++, ld, ranlib — являются необходимыми и достаточными? ничто другое не нужно?
Здравствуйте, Sanik, Вы писали:
S>Есть рассылка boost-build в которой я уже добивался ответа на подобный вопрос
S>Основная идея в том чтобы указать системе bjam путь до правильного компилера S> using gcc : : /path/to/arm-linux-cross-gcc/bin/g++ ;
сделал так, опять компиляция идет, но выскакивают ошибки:
gcc.compile.c++ /путь/boost/bin.v2/libs/wave/build/gcc-3.2.3/debug/link-static/cpplexer/re2clex/cpp_re.o
/tmp/ccHyheT8.s: Assembler messages:
/tmp/ccHyheT8.s:2674: Error: Branch out of range
/tmp/ccHyheT8.s:2680: Error: Branch out of range
/tmp/ccHyheT8.s:2686: Error: Branch out of range
..........
много таких
........
"/opt/mipstools/mips-unknown-linux-gnu/bin/g++" -ftemplate-depth-128 -O0 -fno-inline -w -g -DBOOST_ALL_NO_LIB=1 -I"." -c -o "/instr_env/boost-mips/boost/bin.v2/libs/wave/build/gcc-3.2.3/debug/link-static/cpplexer/re2clex/cpp_re.o" "libs/wave/src/cpplexer/re2clex/cpp_re.cpp"
...failed gcc.compile.c++ /instr_env/boost-mips/boost/bin.v2/libs/wave/build/gcc-3.2.3/debug/link-static/cpplexer/re2clex/cpp_re.o...
...skipped <p/instr_env/boost-mips/boost/bin.v2/libs/wave/build/gcc-3.2.3/debug/link-static>libboost_wave-gcc32-d-1_34_1.a(clean) for lack of <p/instr_env/boost-mips/boost/bin.v2/libs/wave/build/gcc-3.2.3/debug/link-static>cpplexer/re2clex/cpp_re.o...
...skipped <p/instr_env/boost-mips/boost/bin.v2/libs/wave/build/gcc-3.2.3/debug/link-static>libboost_wave-gcc32-d-1_34_1.a for lack of <p/instr_env/boost-mips/boost/bin.v2/libs/wave/build/gcc-3.2.3/debug/link-static>cpplexer/re2clex/cpp_re.o...
...skipped <pstage/lib>libboost_wave-gcc32-d-1_34_1.a for lack of <p/instr_env/boost-mips/boost/bin.v2/libs/wave/build/gcc-3.2.3/debug/link-static>libboost_wave-gcc32-d-1_34_1.a...
.......
в конце
...failed updating 4 targets...
...skipped 16 targets...
...updated 1745 targets...
т.е. я так понял это проблемы с библ. wave, однако в итоге появились ее либы:
libboost_wave-gcc32-1_34_1.a
libboost_wave-gcc32-1_34_1.so
libboost_wave-gcc32-1_34_1.so.1.34.1
libboost_wave-gcc32.a
libboost_wave-gcc32-mt-1_34_1.a
libboost_wave-gcc32-mt-1_34_1.so
libboost_wave-gcc32-mt-1_34_1.so.1.34.1
libboost_wave-gcc32-mt.a
libboost_wave-gcc32-mt.so
libboost_wave-gcc32.so
Это вообщем-то старый баг gcc для MIPS (что-то связанное с оптимизацией) http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11716
Возможно собрав более свежый cross compiler поможет избавиться от этой ошибки.
Однако есть огромное сомнение что boost::wave вообще понадобиться Вам на MIPS если это конечно не ключевая библиотека в вашем продукте (тогда см. выше)
И как следстивие на его ошибки можно не заморачиваться
HTH,
Sergey Nikulov
_>сделал так, опять компиляция идет, но выскакивают ошибки:
_>gcc.compile.c++ /путь/boost/bin.v2/libs/wave/build/gcc-3.2.3/debug/link-static/cpplexer/re2clex/cpp_re.o _>/tmp/ccHyheT8.s: Assembler messages: _>/tmp/ccHyheT8.s:2674: Error: Branch out of range _>/tmp/ccHyheT8.s:2680: Error: Branch out of range _>/tmp/ccHyheT8.s:2686: Error: Branch out of range _>.......... _>много таких _>........
_> "/opt/mipstools/mips-unknown-linux-gnu/bin/g++" -ftemplate-depth-128 -O0 -fno-inline -w -g -DBOOST_ALL_NO_LIB=1 -I"." -c -o "/instr_env/boost-mips/boost/bin.v2/libs/wave/build/gcc-3.2.3/debug/link-static/cpplexer/re2clex/cpp_re.o" "libs/wave/src/cpplexer/re2clex/cpp_re.cpp"
_> ...failed gcc.compile.c++ /instr_env/boost-mips/boost/bin.v2/libs/wave/build/gcc-3.2.3/debug/link-static/cpplexer/re2clex/cpp_re.o... _> ...skipped <p/instr_env/boost-mips/boost/bin.v2/libs/wave/build/gcc-3.2.3/debug/link-static>libboost_wave-gcc32-d-1_34_1.a(clean) for lack of <p/instr_env/boost-mips/boost/bin.v2/libs/wave/build/gcc-3.2.3/debug/link-static>cpplexer/re2clex/cpp_re.o... _> ...skipped <p/instr_env/boost-mips/boost/bin.v2/libs/wave/build/gcc-3.2.3/debug/link-static>libboost_wave-gcc32-d-1_34_1.a for lack of <p/instr_env/boost-mips/boost/bin.v2/libs/wave/build/gcc-3.2.3/debug/link-static>cpplexer/re2clex/cpp_re.o... _> ...skipped <pstage/lib>libboost_wave-gcc32-d-1_34_1.a for lack of <p/instr_env/boost-mips/boost/bin.v2/libs/wave/build/gcc-3.2.3/debug/link-static>libboost_wave-gcc32-d-1_34_1.a...
_>....... _>в конце _> ...failed updating 4 targets... _> ...skipped 16 targets... _> ...updated 1745 targets...
_>т.е. я так понял это проблемы с библ. wave, однако в итоге появились ее либы: _>libboost_wave-gcc32-1_34_1.a _>libboost_wave-gcc32-1_34_1.so _>libboost_wave-gcc32-1_34_1.so.1.34.1 _>libboost_wave-gcc32.a _>libboost_wave-gcc32-mt-1_34_1.a _>libboost_wave-gcc32-mt-1_34_1.so _>libboost_wave-gcc32-mt-1_34_1.so.1.34.1 _>libboost_wave-gcc32-mt.a _>libboost_wave-gcc32-mt.so _>libboost_wave-gcc32.so
Здравствуйте, Sanik, Вы писали:
S>Здравствуйте, alexei_s, Вы писали:
S>Это вообщем-то старый баг gcc для MIPS (что-то связанное с оптимизацией) S>http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11716 S>Возможно собрав более свежый cross compiler поможет избавиться от этой ошибки.
да, нужно попробовать S>Однако есть огромное сомнение что boost::wave вообще понадобиться Вам на MIPS
на 100% верно