51 votes

Support officiel "Boost library" pour Android et iOS?

Cette question s'inscrit dans la suite de ce que je Devrais choisir Boost Asio ou Aysnc Prise de threads dans Android? demandé,

Bibliothèques Boost sont destinés à être largement utile et utilisable dans un large éventail d'applications, mais il n'y a pas de support officiel disponible pour Android et iOS

  1. Est-il une raison particulière derrière le même, comme ne Pas optimisé pour les appareils embarqués? Ou pour toute autre raison?
  2. N'importe quel corps de savoir d'une application construite à l'aide de Boost sur Android ou iOS?
  3. Est-il conseillé d'utiliser boost bibliothèques du réseau intense de l'application qui génère de multiples threads pour commuication?

Pour info..j'ai été en utilisant les liens ci-dessous pour créer un exemple de l'application Android , mais ne réussit pas encore :(

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

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

Inclure Boost C++ de la bibliothèque dans android

Comment utiliser la bibliothèque boost (y compris les shared_ptr) avec l'Android NDK et 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 et le soutien des exceptions C++

Merci à l'avance.

24voto

PowerPC Points 1308

Obtenu de réponse à partir de stimuler la communauté Oui. Ces plates-formes ne sont pas officiellement pris en charge parce que personne n'a volontaire pour passer les tests de régression régulièrement pour eux.

Il n'est pas possible pour un coup de pouce développeur de tester sur toutes les plateformes. Donc les développeurs dépendent les résultats des tests de régression, tests de les bénévoles. Voir, par exemple, http://beta.boost.org/development/tests/trunk/developer/summary.html

Si aucun volontaire pour exécuter les tests pour une plate-forme, qui plate-forme n'est pas officiellement pris en charge.

Donc, si vous vous souciez de Android ou iOS devient officiellement pris en charge, commencer à courir régulièrement (de préférence par jour), des tests de régression pour Boost. Voir http://beta.boost.org/development/running_regression_tests.html

17voto

markshiz Points 1040

Découvrez ma croix-plate-forme de tutoriel sur github. Il vous montre comment configurer les Stimuler et de les utiliser entre iOS et Android. J'ai eu un temps horrible avec cela, je me dis que je serais document en sorte que personne n'avait à le comprendre. Vous remarquerez que ce projet tire aussi dans plusieurs autres éléments couramment utilisés entre les deux plates-formes, par exemple, CoreFoundation et SQLite.

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

Note: Mon tutoriel n'est pas de montrer comment construire les bibliothèques compilées pour boost. Je l'ai fait avant de avec succès en utilisant les instructions que vous avez fournies:

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

Après vous avez une bibliothèque statique, compilé par le Android chaîne d'outils, vous pouvez facilement relier via un module semblables à celles de l' include/[NAME OF NEW SUBMODULE] répertoire du projet ci-dessus. Utiliser quelque chose de similaire à ce qui suit pour l' Android.mk le fichier dans la racine de ce répertoire.

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)

Enfin, l'importation de ce module, comme dans l'exemple, à l'intérieur de

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

Comme beaucoup de vos autres questions: connaissez-vous une application qui utilise Boost sur iOS et Android? Oui, je l'ai fait plusieurs fois avec succès et publié de travail sur les applications de l'App store.

Votre autre question, est-il conseillé d'utiliser boost pour la communication en réseau? Je ne suis pas sûr de ce que vous voulez dire ici. À partir de quel angle? Voulez-vous dire, du point de vue philosophique, technique, etc?

Philosophiquement, vous devez vous demander, quel est votre raisonnement pour l'importation de cette bibliothèque et de l'utiliser entre Android et iOS. Est-il à enregistrer le code de temps, le fardeau de l'entretien. Si oui, je dirais que c'est une excellente façon de le faire. Clairement, il y a certains obstacles et de la douleur pour obtenir ce type de travail. Aussi, l'IDE fonctionnalités de C++ ne sont pas aussi génial que pour Java dans Eclipse. J'essaie d'être juste et équilibré dans le PDF de la présentation dans l' doc/ répertoire. Donner une fois de plus.

À partir d'un point de vue technique, je pense que la seule chose que je tiens à être inquiète, c'est faire en sorte que je nettoyer l'Asio correctement les objets lorsque l'Activité est à l'arrêt. Si vous avez besoin de faire les choses dans l'arrière-plan, l'utilisation d'un Service à la place:

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

12voto

Peter Jankuliak Points 1005

Mise à JOUR: Il semble y avoir un problème avec std::atomique sur Android, et depuis Boost.Asio est de l'utiliser (par défaut), combiné avec les fils, un de temps en temps suis dans l'impasse. Heureusement Boost.Asio permet de changer facilement de Mst.Atomique pour Booster.Atomique et cela a été pris en charge dans la Boost-pour-Android projet dans ce commit.

Pour plus d'infos sur le bug, voir ici


Nous développons un simple jeu multijoueur (pas encore publié) pour Android à l'aide de boost asio et jusqu'à présent, nous n'avons pas eu de problèmes. C'est pour la question #2.

Quels types de problèmes avez-vous observé?

Si les problèmes sont liés à la compilation et la liaison, peut-être que ces conseils vous seront utiles.

Ajoutez ce qui suit à votre AndroidManifest.xml fichier:

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

Disposez-le dans votre Demande.mk fichier:

APP_STL := gnustl_static
APP_CPPFLAGS += -frtti -fexceptions

Et de l'utiliser comme un modèle pour votre Android.mk fichier:

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)

EDIT: Comment pouvons-nous construire le coup de pouce pour Android. C'est ce que nous avons dans notre 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

Notez que nous utilisons notre propre fourchette de Boost-pour-Android, c'est uniquement parce que l'un a un patch pour le nouveau NDK version r8d. Il peut aussi être vu à partir de la ligne de commande que nous sommes à l'aide de la 1.49 version de boost, c'est actuellement le plus élevé pris en charge par Boost-pour-Android.

Si vous voulez savoir quelles combinaisons de Boost et Android NDK sont pris en charge, avoir un coup d'oeil à l'intérieur de la Boost-pour-Android projet. Il contient des répertoires appelés patches/boost-<X>/ndk android<Y> où X correspond à la pris en charge boost version et Y la prise en charge du NDK version (shameless plug: nos 2 cents pour le projet :-)).

11voto

PowerPC Points 1308

Ci-dessous sont quelques-uns plus (Très utile) les informations reçues à partir de stimuler la communauté:

  1. Est-il une raison particulière derrière le même (comme de ne pas optimisé pour périphériques intégrés)? Ou pour toute autre raison?

Boost fonctionne parfaitement sur Android. Comme il y a un NDK (native development kit) avec un assez décent gcc (4.6 quelque chose), vous avez juste besoin de configurer boost construire utiliser le droit de gcc. Bien que ceci fonctionne, il nécessite un peu de bricolage pour obtenir les paramètres de la droite. Mais encore une fois, en principe, il n'y a pas un beaucoup de différence dans la construction de Boost pour Android ou tout autre linux de la distribution.

  1. Y sont (tous) les problèmes connus si nous utilisons des bibliothèques boost pour mise en réseau et la synchronisation des threads de l'application Smartphone le développement ? Sera-ce une bonne idée pour utiliser BOOST ASIO pour la même chose?

Il est parfaitement acceptable d'utiliser Boost.De fil ou de coup de pouce.Asio. Ils fonctionnent parfaitement bien sur les périphériques ARM. Il en est de même de soutien pour les plus spécifiques de la plateforme hackeries comme boost.atomique et boost.contexte.

Pour info les liens trouvés https://github.com/MysticTreeGames/Boost-for-Android http://www.codexperiments.com/android/2011/05/tips-tricks-building-boost-wit h-ndk-r5/

La construction de pouce avec l'Android NDK est même plus simple qu'avec un coup de pouce.construire directement. J'ai compilé un groupe de Android scripts de construction, qui peut être trouvé ici: https://github.com/STEllAR-GROUP/HPXAndroid/tree/master/modules Recherchez les boost_${module} pour diverses bibliothèques boost. Ce n'est pas un la liste complète. Seulement ce dont j'avais besoin. Aussi, peut-être besoin d'un peu d'amour pour 1.53. Toutes les différentes bibliothèques n'a pas du tout besoin spécial android de traitement (modulo quelques bugs mineurs où le compilateur n'étais pas d'accord avec les autres versions de gcc)

J'espère que cela serait utile pour les autres! Merci!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X