NDK de Android: Incluye la biblioteca boost c++
android-ndk makefile (2)
Aquí: http://silverglint.com/boost-for-android/ puede encontrar un script simple que le permite crear una versión moderna (por ejemplo, 1.67.0) de boost para Android, o simplemente descargar archivos binarios precompilados.
También se incluye una aplicación de prueba de muestra que muestra cómo incluir / vincular los encabezados / binarios de boost
Estoy tratando de usar una biblioteca boost dentro de mi aplicación de Android, usando el NDK. He encontrado un par de historias de éxito here y here , pero no puedo decir lo mismo de mí. Estoy tratando específicamente de utilizar la biblioteca en este enlace , así como la biblioteca de subprocesos de impulso. En el código a continuación, solo trato de incluir la biblioteca de hilos, no la biblioteca de matemáticas. El proceso que utilicé para construir las bibliotecas boost es prácticamente el mismo que el primer enlace que adjunté.
Hasta ahora, parece que he construido con éxito las bibliotecas boost, pero cuando ejecuto ndk-build
, ndk-build
el siguiente error:
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 obteniendo aparte de eso es la siguiente línea, que realmente no significa nada. Error 1
Aquí está mi archivo de 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 la 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 librerías boost usando bjam
. Todos los libboost_###.a
están en la carpeta sources/boost/android/lib
.
¿Cuál es el error que estoy recibiendo?
Construí las librerías boost usando Boost-for-Android . Luego tengo en mi directorio boost / include / lib el makefile de Android 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 en el que uso algunas de las bibliotecas de refuerzo 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 se enumeran todos los archivos make de subdir.
TOP_PATH := $(call my-dir)
include $(TOP_PATH)/boost/lib/boost.mk
include $(TOP_PATH)/signalserver/signalserver.mk
.
.
y mi aplicación.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