2015-07-20 322 views
0

我試圖使用ndk-build爲arm64-v8a構建Boost 1.58.0,但是我遇到了問題。Boost 1.58.0使用ndk-build構建arm64-v8a

當我運行bjam時,它完成與錯誤unrecognized command line option '-m64'

而且我發現了什麼是錯的「表演配置檢查」部分,如 :

- 32-bit : no 
- 64-bit : yes 
- arm : no 
... 

我猜arm場應該是yes,這是完全不同的,當我建立它armv7-aarmv7-a的相應版本一直都是成功的。

[環境]

  • 主機:Ubuntu Linux操作系統的x86
  • NDK:機器人-NDK-r10e(谷歌)
  • GCC:4.9
  • 機器人平臺:機器人-21

使用的構建命令是

./bjam toolset=gcc-ndk10.android.21.arm64v8a.4.9 link=static \ 
    runtime-link=static target-os=linux --stagedir=output/arm64-v8a \ 
    --disable-filesystem2 -sICONV_PATH=/home/weareff/local.r10/arm64-v8a/include 

user-config.jam文件如下:

# NDK 10, android-21, arm64-v8a, 4.9, 
using gcc : ndk10.android.21.arm64v8a.4.9 : /home/weareff/external/android-ndk/android-ndk-r10/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86/bin/aarch64-linux-android-gcc : 
<compileflags>--sysroot=/home/weareff/external/android-ndk/android-ndk-r10/platforms/android-21/arch-arm64 
<compileflags>-D_LITTLE_ENDIAN 
<compileflags>-D_POSIX_THREADS=1 
<compileflags>-D_POSIX_SOURCE 
<compileflags>-DANDROID 
<compileflags>-march=armv8-a 
<compileflags>-mtune=cortex-a53 
<compileflags>-fpic 
<compileflags>-ffunction-sections 
<compileflags>-funwind-tables 
<compileflags>-fstack-protector 
<compileflags>-fno-short-enums 
<compileflags>-fomit-frame-pointer 
<compileflags>-fno-strict-aliasing 
<compileflags>-finline-limit=64 
<compileflags>-Wno-psabi 
<compileflags>-Os 
<compileflags>-O2 
<compileflags>-g 
<compileflags>-I"/home/weareff/external/android-ndk/android-ndk-r10/platforms/android-21/arch-arm64/usr/include" 
<compileflags>-I"/home/weareff/external/android-ndk/android-ndk-r10/platforms/android-21/arch-arm64/usr/local/include" 
<compileflags>-I"/home/weareff/external/android-ndk/android-ndk-r10/sources/cxx-stl/gnu-libstdc++/4.9/include" 
<compileflags>-I"/home/weareff/external/android-ndk/android-ndk-r10/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a/include" 
<linkflags>-L"/home/weareff/external/android-ndk/android-ndk-r10/platforms/android-21/arch-arm64/usr/lib" -stdlib=libstdc++ 
<archiver>/home/weareff/external/android-ndk/android-ndk-r10/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86/bin/aarch64-linux-android-ar 
; 

輸出消息如下:

Performing configuration checks 

    - 32-bit     : no 
    - 64-bit     : yes 
    - arm      : no 
    - mips1     : no 
    - power     : no 
    - sparc     : no 
    - x86      : no 
    - combined     : no 

Building the Boost C++ Libraries. 


    - has_icu builds   : no 
    - lockfree boost::atomic_flag : no 

Component configuration: 

    - atomic     : not building 
    - chrono     : not building 
    - container    : not building 
    - context     : not building 
    - coroutine    : not building 
    - date_time    : building 
    - exception    : not building 
    - filesystem    : building 
    - graph     : not building 
    - graph_parallel   : not building 
    - iostreams    : not building 
    - locale     : not building 
    - log      : not building 
    - math      : not building 
    - mpi      : not building 
    - program_options   : not building 
    - python     : not building 
    - random     : not building 
    - regex     : building 
    - serialization   : not building 
    - signals     : not building 
    - system     : building 
    - test      : not building 
    - thread     : building 
    - timer     : not building 
    - wave      : not building 

...patience... 
...found 1318 targets... 
...updating 86 targets... 
common.mkdir bin.v2/libs/date_time 
common.mkdir bin.v2/libs/date_time/build 
common.mkdir bin.v2/libs/date_time/build/gcc-ndk10.android.21.arm64v8a.4.9 
common.mkdir bin.v2/libs/date_time/build/gcc-ndk10.android.21.arm64v8a.4.9/release 
common.mkdir bin.v2/libs/date_time/build/gcc-ndk10.android.21.arm64v8a.4.9/release/link-static 
common.mkdir bin.v2/libs/date_time/build/gcc-ndk10.android.21.arm64v8a.4.9/release/link-static/runtime-link-static 
common.mkdir bin.v2/libs/date_time/build/gcc-ndk10.android.21.arm64v8a.4.9/release/link-static/runtime-link-static/threading-multi 
common.mkdir bin.v2/libs/date_time/build/gcc-ndk10.android.21.arm64v8a.4.9/release/link-static/runtime-link-static/threading-multi/gregorian 
gcc.compile.c++ bin.v2/libs/date_time/build/gcc-ndk10.android.21.arm64v8a.4.9/release/link-static/runtime-link-static/threading-multi/gregorian/greg_month.o 
aarch64-linux-android-gcc: error: unrecognized command line option '-m64' 

    "/home/weareff/external/android-ndk/android-ndk-r10/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86/bin/aarch64-linux-android-gcc" -ftemplate-depth-128 -O3 -finline-functions -Wno-inline -Wall --sysroot=/home/weareff/external/android-ndk/android-ndk-r10/platforms/android-21/arch-arm64 -pthread -m64 -DBOOST_ALL_NO_LIB=1 -DBOOST_DATE_TIME_STATIC_LINK -DDATE_TIME_INLINE -DNDEBUG -I"." -c -o "bin.v2/libs/date_time/build/gcc-ndk10.android.21.arm64v8a.4.9/release/link-static/runtime-link-static/threading-multi/gregorian/greg_month.o" "libs/date_time/src/gregorian/greg_month.cpp" 

...failed gcc.compile.c++ bin.v2/libs/date_time/build/gcc-ndk10.android.21.arm64v8a.4.9/release/link-static/runtime-link-static/threading-multi/gregorian/greg_month.o... 
gcc.compile.c++ bin.v2/libs/date_time/build/gcc-ndk10.android.21.arm64v8a.4.9/release/link-static/runtime-link-static/threading-multi/gregorian/greg_weekday.o 
aarch64-linux-android-gcc: error: unrecognized command line option '-m64' 
+0

但底線是什麼:它是否爲aarch64構建了IGF? –

+0

它無法爲aarch64構建庫。所以我需要幫助。 –

回答

0

對於臂的架構檢查說「不」應該通過在文件中{BOOST_ROOT}造成/ libs/config/checks/architecture/arm.cpp它有以下內容:

#if !defined(__arm__) && !defined(__thumb__) && \ 
    !defined(__TARGET_ARCH_ARM) && !defined(__TARGET_ARCH_THUMB) && \ 
    !defined(_ARM) && !defined(_M_ARM) 
#error "Not ARM" 
#endif 

這個文件不能compl由arm64 GCC滅蠅燈,我們可以通過添加「aarch64」修補它,所以它變成了:

#if !defined(__arm__) && !defined(__thumb__) && \ 
    !defined(__TARGET_ARCH_ARM) && !defined(__TARGET_ARCH_THUMB) && \ 
    !defined(_ARM) && !defined(_M_ARM) && !defined(__aarch64__) 
#error "Not ARM" 
#endif 

這可能使結構檢查認出這是ARM平臺。

1

你可以嘗試跟隨配置選項:

BS_CONFIG_EXTRA := -d2 -q toolset=gcc architecture=arm abi=aapcs address-model=64 
    ./bootstrap.sh && ./b2 $(BS_CONFIG_EXTRA) 

我已經成功地編譯升壓1.58.0庫aarch64硬件。

問候。

+0

對於我的情況,只需要架構= arm和address-model = 64,但是這幫助我最終獲得構建。 – gnash117