2015-07-20 325 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