2013-12-16 217 views
1

我很難嘗試將boost庫交叉編譯爲手臂平臺。
我從http://sourceforge.net/projects/boost/files/boost/獲取源代碼。我試過了。 1.55,1.54和1.49,它們都表現相同。我使用./bootstrap.sh --prefix=/blah/arm-none-eabi。 (arm-none-eabi目錄包含交叉編譯器includelib目錄,其他目錄)。接下來,我通過添加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平臺上提升工作效率?

+1

看起來你需要'-std = C++編譯器11'選項集('-pthread'僅在本AFAIK支持)。實際使用哪種GCC版本?我們實際上正在構建最新的GCC(4.8)ARM交叉工具鏈版本。 –

+0

可能是這個鏈接的幫助(它描述了用GCC 4.7構建交叉工具鏈,但對於GCC 4.8來說並沒有什麼區別):http://dev-jungle.blogspot.de/2013/09/building-gcc-471- arm-cross-toolchain-on.html –

+0

感謝您的回答。我已經添加了-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一起使用的。還有其他想法嗎? –

回答

0
  1. error: 'sys/mman.h: No such file or directory - 編譯器找不到頭「SYS/mman.h」,因爲包括路徑不正確或者系統不包含此文件。

  2. 您可以編譯嵌入式系統,例如手臂非eabi(用於裸機)。 boost.context不支持此ABI。要禁用buidling boost.context和boost.coroutine(取決於boost.context)你必須調用:b2 --without-context --without-coroutine

+0

該庫存在於/ usr/include/sys中,因爲它應該是,我無法找到的庫是rt.h。我會給你的b2調用一個鏡頭。 –

+0

不幸的是,我不斷收到關於無法識別的pthread選項的錯誤,有和沒有'std = C++ 11'選項。也許還有其他想法? –