我很难尝试将boost库交叉编译为手臂平台。
我从http://sourceforge.net/projects/boost/files/boost/获取源代码。我试过了。 1.55,1.54和1.49,它们都表现相同。我使用./bootstrap.sh --prefix=/blah/arm-none-eabi
。 (arm-none-eabi目录包含交叉编译器include
和lib
目录,其他目录)。接下来,我通过添加using gcc : arm : arm-none-eabi-g++ ;
(ARM EABI Sourcery CodeBench Lite 2013.05-23交叉编译器,gcc版本4.7.3)更新文件tools/build/v2/user-config.jam
。之后,我运行./bjam --prefix=/blah/arm-none-eabi/ toolset=gcc-arm
。这给了我很多的错误,如:Boost手臂交叉编译失败
`"arm-none-eabi-g++" -ftemplate-depth-128 -O3 -finline-functions -Wno-inline -Wall -pthread -DBOOST_ALL_NO_LIB=1 -DBOOST_THREAD_USE_LIB=1 -DNDEBUG -I"." -c -o "bin.v2/libs/wave/build/gcc-arm/release/link-static/threading-multi/wave_config_constant.o" "libs/wave/src/wave_config_constant.cpp"
...failed gcc.compile.c++ bin.v2/libs/wave/build/gcc-arm/release/link-static/threading-multi/wave_config_constant.o...
gcc.compile.c++ bin.v2/libs/wave/build/gcc-arm/release/link-static/threading-multi/cpplexer/re2clex/aq.o
arm-none-eabi-g++: error: unrecognized command line option '-pthread'`
我修改了文件$BOOST/tools/build/v2/tools/gcc.jam
-case * : option = -pthread ; libs = rt ;
+case * : option = -lpthread ; libs = rt ;
运行交叉编译后,我再次得到了很多的
"arm-none-eabi-g++" -ftemplate-depth-128 -O3 -finline-functions -Wno-inline -Wall -pedantic -lpthread -fPIC -Wextra -Wno-long-long -Wno-variadic-macros -pedantic -DBOOST_ALL_DYN_LINK=1 -DBOOST_ALL_NO_LIB=1 -DBOOST_SYSTEM_DYN_LINK=1 -DBOOST_SYSTEM_NO_DEPRECATED -DNDEBUG -I"." -c -o "bin.v2/libs/chrono/build/gcc-arm/release/threading-multi/chrono.o" "libs/chrono/src/chrono.cpp"
...failed gcc.compile.c++ bin.v2/libs/chrono/build/gcc-arm/release/threading-multi/chrono.o...
gcc.compile.c++ bin.v2/libs/chrono/build/gcc-arm/release/threading-multi/thread_clock.o
gcc.compile.c++ bin.v2/libs/chrono/build/gcc-arm/release/threading-multi/process_cpu_clocks.o
...skipped <pbin.v2/libs/chrono/build/gcc-arm/release/threading-multi>libboost_chrono.so.1.54.0 for lack of <pbin.v2/libs/chrono/build/gcc-arm/release/threading-multi>chrono.o...
...skipped <pstage/lib>libboost_chrono.so.1.54.0 for lack of <pbin.v2/libs/chrono/build/gcc-arm/release/threading-multi>libboost_chrono.so.1.54.0...
...skipped <pstage/lib>libboost_chrono.so for lack of <pstage/lib>libboost_chrono.so.1.54.0...
gcc.link.dll bin.v2/libs/context/build/gcc-arm/release/threading-multi/libboost_context.so.1.54.0
/home/skramer/PP/MGR/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../../arm-none-eabi/bin/ld: cannot find -lrt
collect2: error: ld returned 1 exit status
"arm-none-eabi-g++" -o "bin.v2/libs/context/build/gcc-arm/release/threading-multi/libboost_context.so.1.54.0" -Wl,-h -Wl,libboost_context.so.1.54.0 -shared -Wl,--start-group "bin.v2/libs/context/build/gcc-arm/release/threading-multi/asm/make_arm_aapcs_elf_gas.o" "bin.v2/libs/context/build/gcc-arm/release/threading-multi/asm/jump_arm_aapcs_elf_gas.o" -Wl,-Bstatic -Wl,-Bdynamic -lrt -Wl,--end-group -lpthread
...failed gcc.link.dll bin.v2/libs/context/build/gcc-arm/release/threading-multi/libboost_context.so.1.54.0...
...skipped <pstage/lib>libboost_context.so.1.54.0 for lack of <pbin.v2/libs/context/build/gcc-arm/release/threading-multi>libboost_context.so.1.54.0...
...skipped <pstage/lib>libboost_context.so for lack of <pstage/lib>libboost_context.so.1.54.0...
gcc.compile.c++ bin.v2/libs/coroutine/build/gcc-arm/release/link-static/threading-multi/detail/standard_stack_allocator_posix.o
libs/coroutine/src/detail/standard_stack_allocator_posix.cpp:14:22: fatal error: sys/mman.h: No such file or directory
compilation terminated.
"arm-none-eabi-g++" -ftemplate-depth-128 -O3 -finline-functions -Wno-inline -Wall -lpthread -DBOOST_ALL_NO_LIB=1 -DNDEBUG -I"." -c -o "bin.v2/libs/coroutine/build/gcc-arm/release/link-static/threading-multi/detail/coroutine_context.o" "libs/coroutine/src/detail/coroutine_context.cpp"
...failed gcc.compile.c++ bin.v2/libs/coroutine/build/gcc-arm/release/link-static/threading-multi/detail/coroutine_context.o...
...skipped <pbin.v2/libs/coroutine/build/gcc-arm/release/link-static/threading-multi>libboost_coroutine.a(clean) for lack of <pbin.v2/libs/coroutine/build/gcc-arm/release/link-static/threading-multi>detail/standard_stack_allocator_posix.o...
...skipped <pbin.v2/libs/coroutine/build/gcc-arm/release/link-static/threading-multi>libboost_coroutine.a for lack of <pbin.v2/libs/coroutine/build/gcc-arm/release/link-static/threading-multi>detail/standard_stack_allocator_posix.o...
...skipped <pstage/lib>libboost_coroutine.a for lack of <pbin.v2/libs/coroutine/build/gcc-arm/release/link-static/threading-multi>libboost_coroutine.a...
gcc.compile.c++ bin.v2/libs/date_time/build/gcc-arm/release/threading-multi/gregorian/greg_month.o
gcc.compile.c++ bin.v2/libs/date_time/build/gcc-arm/release/threading-multi/gregorian/greg_weekday.o
gcc.compile.c++ bin.v2/libs/date_time/build/gcc-arm/release/threading-multi/gregorian/date_generators.o
gcc.link.dll bin.v2/libs/date_time/build/gcc-arm/release/threading-multi/libboost_date_time.so.1.54.0
/home/skramer/PP/MGR/arm-2013.05/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../../arm-none-eabi/bin/ld: cannot find -lrt
collect2: error: ld returned 1 exit status
我不真的知道现在该做什么。我一直在搜索几个小时,但没有结果。我试过用b2代替bjam - 没有任何改变。我也尝试了一种不同的手臂交叉编译器--Xilinx EABI Sourcery CodeBench Lite 2012.03-83(gcc 4.6.3),它似乎产生的错误较少,但仍然有很多语法,并且没有像错误那样的文件或目录。我怎样才能在arm平台上提升工作效率?
看起来你需要'-std = C++编译器11'选项集('-pthread'仅在本AFAIK支持)。实际使用哪种GCC版本?我们实际上正在构建最新的GCC(4.8)ARM交叉工具链版本。 –
可能是这个链接的帮助(它描述了用GCC 4.7构建交叉工具链,但对于GCC 4.8来说并没有什么区别):http://dev-jungle.blogspot.de/2013/09/building-gcc-471- arm-cross-toolchain-on.html –
感谢您的回答。我已经添加了-std = C++ 11到gcc.jam(例如''arm-xilinx-eabi-g ++“-ftemplate-depth-128 -O3 -finline-functions -Wno-inline -Wall -std = c + +11 -pthread -DBOOST_ALL_NO_LIB = 1 -DBOOST_THREAD_USE_LIB = 1 -DNDEBUG -I“”-c -o“bin.v2/libs/wave/build/gcc-arm/release/link-static/threading-multi/token_ids。 o“”libs/wave/src/token_ids.cpp“),但我仍然不断收到关于无法识别的选项'-pthread'的错误。你提供的链接使用configure,这是不可能与boost一起使用的。还有其他想法吗? –