Android NDK: Incluye la biblioteca de boost c ++
Estoy intentando utilizar una biblioteca del alza dentro de mi uso del androide, usando el NDK. He encontrado un par de historias de éxito aquí y aquí , pero no puedo decir lo mismo de mí. Estoy específicamente tratando de usar la biblioteca en este enlace , así como la biblioteca de hilos de impulso. En el código de abajo, sólo estoy tratando de incluir la biblioteca de subprocesos, no la biblioteca de matemáticas. El proceso que usé para construir las bibliotecas de impulso es prácticamente el mismo que el primer enlace que adjunto.
Hasta ahora, parece que he construido con éxito las bibliotecas de impulso, pero cuando ejecuto ndk-build
, obtengo el siguiente error:
- Herramienta para generar un Android.mk
- ¿Dónde se supone Android.mk?
- Cada compilación NDK es una reconstrucción completa
- ¿Cómo funciona la dependencia de módulos en Android?
- Cómo escribir el sello de tiempo de construcción en apk
Prebuilt : libboost_thread.a <= <NDK>/sources/ cp: omitting directory `path/to/ndk/sources/boost' make: *** [obj/local/armeabi/libboost_thread.a] Error 1
Obviamente el cp: omitting directory...
no es exactamente un error. Pero lo único que estoy recibiendo, aparte de eso, es la siguiente línea, que en realidad no significa nada. Error 1
Aquí está mi archivo Android.mk:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_STATIC_LIBRARIES := boost_thread LOCAL_LDLIBS := lboost_system-gcc-md lboost_thread-gcc-md -lgnustl_static LOCAL_LDLIBS += lboost_system-gcc-md lboost_thread-gcc-md \ -L$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/libs/armeabi \ -lgnustl_static LOCAL_SRC_FILES := #cpp_sources LOCAL_MODULE := com_example_ndkFile_CppMethods include $(BUILD_SHARED_LIBRARY) $(call import-module,boost)
Y también hay un archivo Android.mk en path/to/ndk/sources/boost/
:
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:= boost_thread LOCAL_SRC_FILES:= android/lib/libboost_thread.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) include $(PREBUILT_STATIC_LIBRARY)
Y mi humilde archivo Application.mk:
APP_ABI := armeabi armeabi-v7a APP_STL := gnustl_static APP_CPPFLAGS = -fexceptions
Construí las bibliotecas de impulso utilizando bjam
. Todos los libboost_###.a
están en la carpeta sources/boost/android/lib
.
¿Cuál es el error que estoy recibiendo?
- Referencia indefinida a 'typeinfo for testing :: Test' con Google Test en Android NDK
- De repente, la hormiga / carpeta no aparece en el SDK de Android. Google lo eliminó?
- Copia varios archivos txt en / system usando Android.mk
- Cómo configurar la variable GNUMAKE para que ndk-build funcione
- Android NDK: Abortar detener?
- Construyendo Android desde fuentes: unsupported reloc 43
- ¿Cómo ejecutar reglas personalizadas en Android.mk antes de la compilación?
- Android no puede construir el proyecto con NDK-Build.cmd de NDK r7
Construí las bibliotecas de impulso con Boost-for-Android . Entonces tengo en mi directorio boost / include / lib el androide makefile boost.mk
LOCAL_PATH := $(call my-dir) # boost_date_time # include $(CLEAR_VARS) LOCAL_MODULE := boost_date_time LOCAL_SRC_FILES := libboost_date_time-gcc-mt-1_53.a include $(PREBUILT_STATIC_LIBRARY) # boost_filesystem # include $(CLEAR_VARS) LOCAL_MODULE := boost_filesystem LOCAL_SRC_FILES := libboost_filesystem-gcc-mt-1_53.a include $(PREBUILT_STATIC_LIBRARY) # boost_thread # include $(CLEAR_VARS) LOCAL_MODULE := boost_thread LOCAL_SRC_FILES := libboost_thread-gcc-mt-1_53.a include $(PREBUILT_STATIC_LIBRARY) # boost_system # include $(CLEAR_VARS) LOCAL_MODULE := boost_system LOCAL_SRC_FILES := libboost_system-gcc-mt-1_53.a include $(PREBUILT_STATIC_LIBRARY) # boost_program_options # include $(CLEAR_VARS) LOCAL_MODULE := boost_program_options LOCAL_SRC_FILES := libboost_program_options-gcc-mt-1_53.a include $(PREBUILT_STATIC_LIBRARY) # boost_chrono # include $(CLEAR_VARS) LOCAL_MODULE := boost_chrono LOCAL_SRC_FILES := libboost_chrono-gcc-mt-1_53.a include $(PREBUILT_STATIC_LIBRARY)
Y mi módulo donde yo uso algunas de las bibliotecas de impulso se ve así
LOCAL_PATH := $(call my-dir) # SignalServer, executable # include $(CLEAR_VARS) LOCAL_CFLAGS := -DTIXML_USE_TICPP #LOCAL_CFLAGS += -DDEBUG LOCAL_STATIC_LIBRARIES := boost_thread \ boost_system \ boost_filesystem \ boost_program_options \ boost_chrono \ LOCAL_STATIC_LIBRARIES += ticpp \ tia \ tobicore \ tobiid \ tid \ gdf LOCAL_MODULE := signalserver LOCAL_C_INCLUDES := $(LOCAL_PATH)/include LOCAL_C_INCLUDES += $(LOCAL_PATH)/extern/include LOCAL_C_INCLUDES += $(LOCAL_PATH)/../boost/include/boost-1_53 LOCAL_SRC_FILES := #cpp source include $(BUILD_EXECUTABLE)
Además tengo un Android.mk donde todos los subdir makefiles están listados
TOP_PATH := $(call my-dir) include $(TOP_PATH)/boost/lib/boost.mk include $(TOP_PATH)/signalserver/signalserver.mk . .
Y mi Application.mk:
APP_PLATFORM := android-14 APP_ABI := armeabi-v7a #APP_OPTIM := debug #NDK_DEBUG := 1 NDK_TOOLCHAIN_VERSION := 4.6 APP_STL := gnustl_static APP_CPPFLAGS := -fexceptions -frtti
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.
- El elemento uses-sdk no puede tener un atributo "tools: node"
- Android: ¿cómo puedo saber si el teclado está mostrando o no?