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?
- Tomar una foto con android ndk - camera api
- Acceso al contexto android en la aplicación ndk
- Android no puede construir el proyecto con NDK-Build.cmd de NDK r7
- ¿Es necesario el NDK para un buen desempeño en el desarrollo de un juego Android?
- Error de NDKBuild
Y cuando puedo compilarlo, ¿cómo debo hacerlo para usarlo en mi proyecto de aplicación para Android?
- Implementación de un gráfico de filtro de entrada múltiple con la librería Libavfilter en Android NDK
- Cómo agregar múltiples TextView dynamicall a la definición LinearLayout en main.xml
- Qt5 QGeoPositionInfoSource :: createDefaultSource () se bloquea en Android 5.0
- Android NDK C ++ JNI (no se ha encontrado ninguna implementación para el nativo ...)
- Compilación de la biblioteca C para android
- Android Fatal señal 11 (SIGSEGV) en 0x636f7d89 (código = 1). ¿Cómo se puede localizar?
- Unicode y Android NDK
- NDK no está configurado problema en android studio
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:
-
En build-android.sh, justo después de la línea mencionada aquí arriba:
TOOLCHAIN = $ {TOOLCHAIN: -arm-linux-androideabi-4.9}
-
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.
- Android Studio no puede autenticarse con SVN
- ¿Cómo puedo eliminar un elemento específico de un JSONArray?