Сборка Boost для Android с arm64_v8a с использованием GCC - PullRequest
1 голос
/ 23 мая 2019

Я пытаюсь собрать библиотеку Boost для поддержки arm64 с NDK 17c, используя GCC (мы не перешли на clang).

Вот user.config.jam:

# ----------------------
# Android configuration.
# ----------------------

using gcc : androidR8
:
$ANDROID_NDK_ROOT/toolchains/bin/arm-linux-androideabi-g++
:
<archiver>arm-linux-androideabi-ar
<compileflags>-fexceptions
<compileflags>-frtti
<compileflags>-fpic
<compileflags>-ffunction-sections
<compileflags>-funwind-tables
<compileflags>-D__ARM_ARCH_5__
<compileflags>-D__ARM_ARCH_5T__
<compileflags>-D__ARM_ARCH_5E__
<compileflags>-D__ARM_ARCH_5TE__
<compileflags>-Wno-psabi
<compileflags>-march=armv5te
<compileflags>-mtune=xscale
<compileflags>-msoft-float
<compileflags>-mthumb
<compileflags>-Os
<compileflags>-fomit-frame-pointer
<compileflags>-fno-strict-aliasing
<compileflags>-finline-limit=64
<compileflags>-I${ANDROID_NDK_ROOT}/platforms/android-26/arch-arm/usr/include
<compileflags>-Wa,--noexecstack
<compileflags>-DANDROID
<compileflags>-D__ANDROID__
<compileflags>-DNDEBUG
<compileflags>-O2
<compileflags>-g
<compileflags>-I${ANDROID_NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/include
<compileflags>-I${ANDROID_NDK_ROOT}/sysroot/usr/include
<compileflags>-I${ANDROID_NDK_ROOT}/sysroot/usr/include/arm-linux-androideabi/
<compileflags>-I${ANDROID_NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a/include
# @Moss - Above are the 'official' android flags
<address-model>64
<architecture>arm
<compileflags>-fvisibility=hidden
<compileflags>-fvisibility-inlines-hidden
<compileflags>-fdata-sections
<cxxflags>-D__arm__
<cxxflags>-D_REENTRANT
<cxxflags>-D_GLIBCXX__PTHREADS
;

Как показано, я установил:

<compileflags>-I${ANDROID_NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a/include

<address-model>64

to build for arm64_v8a. Still, the generated binary objdumps:

objdump -D libboost_atomic-gcc-mt-1_62.a

libboost_atomic-gcc-mt-1_62.a(lockpool.o):  file format ELF32-arm-little

Вот моя команда bjam:

cmd="env PATH=$(dirname $CXXPATH):$PATH \
        AndroidNDKRoot=$(GetNDK) NO_BZIP2=1 \
        ./bjam toolset=$TOOLSET -q \
            cxxflags=\"$CXXFLAGS\" \
            link=static threading=multi --layout=versioned install";

TOOLSET=gcc-androidR8
CXXFLAGS=-fPIC
CXXPATH=android-ndk/toolchains/bin/arm-linux-androideabi-g++

Она прекрасно работает для armeabi-v7a.

Как заставить Boost генерировать библиотеки arm64 с помощью gcc?

...