Soporte oficial "Boost library" para Android e iOS? [cerrado]


Esta pregunta es la continuación de ¿Debo elegir Boost Asio o Aysnc Socket threads en Android? preguntó,

Las bibliotecas Boost están destinadas a ser ampliamente útiles y utilizables en una amplia gama de aplicaciones, pero aún así no hay soporte oficial disponible para Android e iOS

  1. ¿Hay alguna razón específica detrás de lo mismo como no optimizado para dispositivos embebidos? ¿O por alguna otra razón?
  2. ¿Cualquier cuerpo sabe de cualquier aplicación construida usando Boost en Android o iOS?
  3. ¿Es aconsejable usar bibliotecas boost para aplicaciones intense de red que generan subprocesos múltiples para la comunicación?

PARA TU información..He estado usando los siguientes enlaces para crear una aplicación de Android de ejemplo, pero aún no ha tenido éxito: (

Https://github.com/MysticTreeGames/Boost-for-Android

Http://www.codexperiments.com/android/2011/05/tips-tricks-building-boost-with-ndk-r5/

Incluir la biblioteca de Boost C++ en android

Cómo usar la biblioteca boost (incluyendo shared_ptr) con Android NDK y STLPort

Https://sites.google.com/site/fourdollars/android/android-mk

Https://groups.google.com/forum/?fromgroups=#! topic/android-ndk / 4lxhsKFe7Ho

Http://www.crystax.net/trac/ndk/ticket/6

Android NDK R5 y compatibilidad con la excepción de C++

Gracias de antemano.

Author: Community, 2012-12-26

4 answers

Recibió respuesta de la comunidad boost Sí. Estas plataformas no son compatibles oficialmente porque nadie tiene se ofreció para ejecutar pruebas de regresión regularmente para ellos.

No es posible que un desarrollador de Boost realice pruebas en todas las plataformas. Tan los desarrolladores dependen de los resultados de las pruebas de regresión ejecutadas por voluntario. Por ejemplo, véase http://beta.boost.org/development/tests/trunk/developer/summary.html

Si nadie se ofrece voluntario para ejecutar las pruebas para una plataforma en particular, que la plataforma no está soportada oficialmente.

Así que si te preocupa que Android o iOS sean compatibles oficialmente, comience a ejecutar pruebas de regresión regulares (preferiblemente diarias) para Boost. Véase http://beta.boost.org/development/running_regression_tests.html

 23
Author: RDX,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-27 12:17:30

Echa un vistazo a mi tutorial multiplataforma en github. Te muestra cómo configurar Boost y usarlo entre iOS y Android. Tuve una horrible el tiempo con esto, me imagino que me gustaría documento, para que nadie más tenía que averiguar. Notarás que este proyecto también extrae varios otros elementos comunes utilizados entre las dos plataformas, por ejemplo, CoreFoundation y SQLite.

Https://github.com/markshiz/cross-platform-tutorial

Nota: Mi tutorial no muestra cómo construir el bibliotecas compiladas para boost. He hecho eso antes con éxito usando las instrucciones que usted proporcionó:

Http://www.codexperiments.com/android/2011/05/tips-tricks-building-boost-with-ndk-r5/

Después de tener una biblioteca estática compilada por la cadena de herramientas de Android, puede vincularla fácilmente a través de un módulo similar a los del directorio include/[NAME OF NEW SUBMODULE] del proyecto anterior. Use algo similar a lo siguiente para el archivo Android.mk en la raíz de ese directorio.

include $(CLEAR_VARS)
LOCAL_MODULE:= boost_regex
LOCAL_SRC_FILES:= ./path/to/built/static/library/libboost_regex-gcc-mt-s.a
LOCAL_EXPORT_C_INCLUDES := ./path/to/the/directory/that/has/the/boost/headers
include $(PREBUILT_STATIC_LIBRARY)

Finalmente, importa ese módulo, como en el ejemplo, dentro de

$(call import-module,[NAME OF NEW SUBMODULE])

En cuanto a sus otras preguntas know ¿sabe de una aplicación que utiliza Boost en iOS y Android? Sí, lo he hecho varias veces con éxito y he lanzado aplicaciones de trabajo a las tiendas de aplicaciones.

Su otra pregunta, es aconsejable utilizar boost para la comunicación de red? No estoy seguro de lo que quieres decir. Desde qué ángulo? ¿Te refieres filosóficamente, técnicamente, etc.?

Filosóficamente, usted tiene que preguntarse, ¿cuál es su razonamiento para la importación de esta biblioteca y su uso entre Android e iOS. Es para ahorrar tiempo de código, carga de mantenimiento. Si es así, diría que esta es una excelente manera de hacerlo. Claramente hay algunos obstáculos y el dolor para conseguir este tipo de una configuración de trabajo. Además, las características de IDE para C++ no son tan impresionantes como para Java en Eclipse. Trato de ser justo y equilibrado en la presentación en PDF en el directorio doc/. Dale una vez. sobre.

Desde una perspectiva técnica, creo que lo único que me preocuparía es asegurarme de limpiar los objetos Asio correctamente cuando se detiene la Actividad. Si necesita hacer cosas en segundo plano, use un Servicio en su lugar:

Http://developer.android.com/reference/android/app/Service.html

 16
Author: markshiz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-01 19:05:34

ACTUALIZACIÓN: Parece que hay un problema con std:: atomic en Android, y desde Boost.Asio lo está usando (por defecto), combinado con hilos, uno de vez en cuando se bloqueó. Afortunadamente Impulsar.Asio hace que sea fácil cambiar de Std.Atómico para aumentar.Atomic y esto se ha solucionado en el proyecto Boost-for-Android en este commit .

Para obtener más información sobre el error, consulte aquí


Estamos desarrollando un juego multijugador simple (todavía no lanzado) para Android usando boost asio y hasta ahora no hemos tenido ningún problema. Eso es para la pregunta # 2.

¿Qué tipo de problemas estás viendo?

Si los problemas están relacionados con la compilación y el enlace, tal vez estas sugerencias sean útiles.

Agrega lo siguiente a tu AndroidManifest.archivo xml:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

Tenga esto en su Application.mk archivo:

APP_STL := gnustl_static
APP_CPPFLAGS += -frtti -fexceptions

Y utilizar esto como una plantilla para su Android.mk archivo:

LOCAL_PATH := $(call my-dir)
BOOST_VERSION      := 1_49
PROJECT_ROOT       := $(LOCAL_PATH)/../../../..
BOOST_INCLUDE_PATH := /path/to/boost/headers
BOOST_LIB_PATH     := /path/to/boost/libraries

# Path and name of the STL library. Add this to the *end* of LOCAL_LDLIBS.
# Note this is a hack/workaround to prevent linker errors when compiling with 
# boost. 
STL_LIBS := -L$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/libs/armeabi \
                    -lgnustl_static

include $(CLEAR_VARS)

LOCAL_MODULE    := native-activity
LOCAL_C_INCLUDES:= $(BOOST_INCLUDE_PATH) \
                   $(PROJECT_ROOT)/src \
                   $(PROJECT_ROOT)/platform/android/jni

LOCAL_SRC_FILES := main.cpp
LOCAL_LDLIBS    := -llog -landroid

# The order of these libraries is often important.
LOCAL_LDLIBS += -L$(BOOST_LIB_PATH)     \
                -lboost_system-gcc-mt-$(BOOST_VERSION)  \
                -lboost_thread-gcc-mt-$(BOOST_VERSION)  \
                $(STL_LIBS)

LOCAL_STATIC_LIBRARIES := android_native_app_glue

include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)

EDITAR: Cómo construimos boost para Android. Esto es lo que tenemos en nuestro Makefile:

git clone git://github.com/madadam/Boost-for-Android.git
./build-android.sh --boost=1.49.0 --with-libraries=chrono,program_options,system,thread /path/to/ndk

Tenga en cuenta que estamos utilizando nuestra propia bifurcación de Boost-for-Android, esto es solo porque uno tiene un parche para la nueva versión NDK r8d. También se puede ver desde la línea de comandos que estamos utilizando la versión 1.49 de boost, esta es actualmente la más alta soportada por Boost-for-Android.

Si desea saber qué combinaciones de Boost y Android NDK son compatibles, eche un vistazo dentro del proyecto Boost-for-Android. Contiene directorios llamados patches / boost - X>/ndk-android Y> donde X corresponde a la versión soportada de boost y Y a la versión soportada de NDK (shameless plug: our 2 cents to the project :-)).

 12
Author: Peter Jankuliak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-17 15:58:16

A continuación se muestra más información (muy útil) recibida de la comunidad boost:

  1. ¿Hay alguna razón específica detrás de lo mismo (como no optimizado para dispositivos integrados)? ¿O por alguna otra razón?

Boost funciona perfectamente en Android. Como hay un NDK (kit de desarrollo nativo) con un gcc bastante decente (4.6 algo) solo necesita configurar boost build para usar el gcc correcto. Aunque todo esto funciona, requiere un poco de juguetear para obtener la configuración correcta. Pero una vez más, en principio, no hay un mucha diferencia en la construcción de Boost para Android o cualquier otro linux distribución.

  1. ¿Hay (en absoluto) algún problema conocido si usamos bibliotecas boost para redes y sincronización de subprocesos para aplicaciones de teléfonos inteligentes ¿desarrollo ? ¿Será una buena idea usar BOOST ASIO para lo mismo?

Está perfectamente bien usar Boost.Hilo o impulso.Asio. Funcionan perfectamente bien en EL BRAZO dispositivo. Incluso hay soporte para los hackers más específicos de la plataforma como boost.atomic y boost.contexto.

FYI son los enlaces encontrados https://github.com/MysticTreeGames/Boost-for-Android http://www.codexperiments.com/android/2011/05/tips-tricks-building-boost-with-ndk-r5 /

Construir boost con Android NDK es aún más simple que con boost.construir directamente. Compilé un montón de scripts de construcción de Android, que se pueden encontrar aqui: https://github.com/STEllAR-GROUP/HPXAndroid/tree/master/modules Busque el módulo boost_ {{} para varias bibliotecas boost. Esto no es un lista completa. Sólo lo que necesitaba. Además, podría necesitar un poco de amor para 1.53. Todas las diferentes bibliotecas no necesitaban ningún tratamiento especial para Android (modulo algunos errores menores donde el compilador no estaba de acuerdo con otras versiones de gcc)

¡Espero que esto también sea útil para otros! ¡Gracias!

 11
Author: Rohit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-05 15:33:51