Compila y utiliza impulso para Android NDK R10e

¿Cómo puedo compilar y utilizar Boost para Android NDK? He probado todo lo que he encontrado en línea, desde Boost para Android hasta compilarlo yo mismo con el archivo bjam. Sin embargo, no lo logro. Cuando intento compilarlo con bjam, consigo el error siguiente:

error: toolset gcc initialization: error: version 'androidR10e' requested but 'g++-androidR10e' not found and version '4.2.1' of default 'g++' does not match error: initialized from /path/to/android-ndk-r10e/sources/boost/tools/build/v2/user-config.jam:86 

¿Alguien ha utilizado con éxito Boost con Android NDK R10e?

Y cuando puedo compilarlo, ¿cómo debo hacerlo para usarlo en mi proyecto de aplicación para Android?

Hemos logrado compilarlo para NDKr10d. Debe ser el mismo para NDKr10e. El project-config.bjam debe apuntar al compilador gcc desde el NDK. La nuestra se ve así:

 import option ; using gcc : arm : D:\\android\\ndk\\toolchains\\arm-linux-androideabi-4.9\\prebuilt\\windows-x86_64\\bin\\arm-linux-androideabi-g++.exe ; option.set keep-going : false ; 

Luego compile con b2, diciendo caminos a android incluye:

 b2 --reconfigure <your options> toolset=gcc-arm include=<ndk folder>\sources\cxx-stl\gnu-libstdc++\4.9\include include=<ndk folder>\sources\cxx-stl\gnu-libstdc++\4.9\libs\<target platform>\include include=<ndk folder>\platforms\<android api version>\arch-arm\usr\include install --libdir=stage\lib\<target platform> 

Estamos a punto de pasar a ndkr10e. ¿Podría decir si el impulso todavía funciona con él? 🙂

La forma más sencilla sería utilizar CrystaX NDK , que contiene bibliotecas Boost ya construidas y listas para usar. Y aquí hay ejemplos de cómo usar Boost con CrystaX NDK: 1 , 2

Siguiendo las instrucciones de impulso, pude construir un boost de 1.60 con NDKr10e en Ubuntu 12.04 (aunque sospecho que muy poco depende del sistema host). Aquí están mis notas:

Obtener y descomprimir fuente fuente tarball (i utilizado 1.60): boost_1_60_0.tar.bz2

 moskewcz@maaya:/scratch/moskewcz/android/src$ ll total 74M drwx------ 10 moskewcz moskewcz 4.0K Mar 9 14:14 boost_1_60_0 -rw-rw-r-- 1 moskewcz moskewcz 74M Jan 5 11:15 boost_1_60_0.tar.bz2 

Siga las instrucciones de impulso para comenzar en la sección Unix "Build Custom Binaries"

Utilice una raíz fresca y vacía para instalar b2 ie / scratch / boost-build-root; Use usr como prefijo; De nuevo siguiendo las instrucciones de impulso:

 moskewcz@maaya:/scratch/moskewcz/android/src/boost_1_60_0/tools/build$ ./bootstrap.sh moskewcz@maaya:/scratch/moskewcz/android/src/boost_1_60_0/tools/build$ ./b2 install --prefix=/scratch/moskewcz/android/boost-build-root/usr 

Poner b2 en el camino (de nuevo como por instrucciones)

 export PATH=/scratch/moskewcz/android/boost-build-root/usr/bin:$PATH 

En algunos jamfile (no tenía ~ / user-config.jam, por lo que creé uno y lo usé, tal vez hay una mejor opción de jamfile para crear / editar) añadir algún código de atasco (?) Para definir una versión de gcc ) Apuntando a un g ++ de una cadena de herramientas independiente. Tenga en cuenta que se trata de una cadena de herramientas creada con el NDK de la manera normal después de las instrucciones de "crear una cadena de herramientas independiente". No estoy señalando a un g ++ dentro de la propia NDK (que puede o no puede funcionar, no lo sé):

 import option ; using gcc : arm_linux_android_4.9 : /scratch/android-stc/bin/aarch64-linux-android-g++ ; option.set keep-going : false ; 

Ir a impulsar la raíz del proyecto y construir, en su mayoría según las instrucciones. –build-dir puede ser opcional? También añadió -j8 a hacer || construir

 moskewcz@maaya:/scratch/moskewcz/android/src/boost_1_60_0$ b2 -j8 --build-dir=bin.v2 toolset=gcc-arm_linux_android_4.9 stage 

Tenga en cuenta que esto intenta construir libras estáticas y compartidas de forma predeterminada, pero la creación de librerías compartidas falla debido a que android no tiene librt.so – según mi investigación, la gente afirma que bajo android (algunos de?) La funcionalidad de librt.so Está dentro de libc.so – por lo que puede ser correcto simplemente eliminar -lrt de los pasos de enlace para construir libs compartidas para android. No lo intenté. ver:

https://code.google.com/p/android/issues/detail?id=5730

Building Boost para Android con error "no se puede encontrar -lrt"

Sólo logré construir con 10d . Compilación cruzada de Linux-> Android con Boost para Android funcionó de inmediato con eso.

Para descargar una ndk un poco obsoleta, ya que no todos los ndk son inmediatamente compatibles con Boost para Android , puede utilizar esta guía: ¿Dónde puedo encontrar versiones antiguas de Android NDK?

Nota: También quería especificar la cadena de herramientas. Tuve que hacerlo en 2 lugares:

  1. En build-android.sh, justo después de la línea mencionada aquí arriba:

    TOOLCHAIN ​​= $ {TOOLCHAIN: -arm-linux-androideabi-4.9}

  2. En la línea de comandos

    Bash build-android.sh [ubicación ndk] –toolchain = arm-linux-androideabi-4.9

De hecho, funcionó mejor cuando especificé exactamente qué componentes de impulso quería con --with-libraries=[comma separated list] .

Si en vez de eso yo construyera todo, yo conseguiría:

… falló la actualización de 38 destinos …

… saltó 6 objetivos …

… actualizado 10568 objetivos …

ERROR: ¡No se ha podido crear impulso para Android!

¡Hecho!

Aquí: http://silverglint.com/boost-for-android/ puede encontrar una forma sencilla e indolora de construir una versión moderna (eg 1.64.0) de boost para android. Funciona con clang y gcc.

También se incluye una aplicación de ejemplo que muestra cómo usar los binarios de optimización así construidos.

  • Usando eigen con android ndk
  • Ejecución de una biblioteca nativa en Android L. error: solo se admiten ejecutables independientes de posición (PIE)
  • No se invoca el método Java cuando se llama desde pthread nativo
  • No se puede vincular la biblioteca nativa en la muestra de Android de OpenCV
  • No se pudo cargar (encontrar) la biblioteca j2v8_android_x86
  • Distinción múltiple de versionkode de apk
  • Cómo vincular las bibliotecas estáticas (archivos .a) con APK utilizando gradle experimental plugin 0.2.0 en Android Studio
  • ¿Cómo cruzar la compilación de OpenSSH para ARM?
  • Android NDK aplicación se estrelló en ejecutar en funciones que ni siquiera llamado
  • ¿Es posible reiniciar el teléfono con Android SDK o NDK?
  • No se puede abrir dlopen (libsomething.so) No se puede cargar la biblioteca: link_image : no se pudo enlazar libsomething.so
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.