Подтвердить что ты не робот

Официальная поддержка "Boost library" для Android и iOS?

Этот вопрос является продолжением Должен ли я выбирать потоки Boost Asio или Aysnc Socket в Android? спросил,

Библиотеки Boost предназначены для широкого использования и могут использоваться в широком спектре приложений, но пока нет официальной поддержки для Android и iOS

  • Есть ли какая-то конкретная причина по сравнению с тем, что не оптимизировано для встроенные устройства? Или любая другая причина?
  • Означает ли какой-либо орган какое-либо приложение, созданное с помощью Boost на Android или iOS?
  • Желательно ли использовать библиотеки boost для интенсивного приложения в сети, который генерирует многопоточные потоки для компромиссов?

FYI.. Я использовал следующие ссылки для создания примера приложения для Android, но пока не удалось: (

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

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

Включить библиотеку Boost С++ в android

Как использовать библиотеку boost (включая shared_ptr) с Android NDK и 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 и поддержка исключения С++

Спасибо заранее.

4b9b3361

Ответ 1

Получил ответ от сообщества разработчиков Да. Эти платформы официально не поддерживаются, потому что никто не имеет  добровольно предложил регулярно проводить регрессионные тесты для них.

Разработчик Boost не может тестироваться на всех платформах. Так  разработчики зависят от результатов теста регрессионных тестов, выполняемых  добровольцы. Например, см. http://beta.boost.org/development/tests/trunk/developer/summary.html

Если никто не добровольно запускает тесты для конкретной платформы, это  платформа официально не поддерживается.

Итак, если вы заботитесь о том, чтобы Android или iOS стали официально поддерживаться,  начните регулярные (предпочтительно ежедневные) регрессионные тесты для Boost.  См. http://beta.boost.org/development/running_regression_tests.html

Ответ 2

Посмотрите мой кросс-платформенный учебник по github. Он показывает, как настроить Boost и использовать его между iOS и Android. У меня было такое ужасное время с этим, я полагаю, что я буду документировать его, чтобы никто больше не мог это понять. Вы заметите, что этот проект также использует несколько других общих элементов, используемых между двумя платформами, например, CoreFoundation и SQLite.

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

Примечание. В моем учебнике не показано, как создавать скомпилированные библиотеки для повышения. Я сделал это с успехом, используя предоставленные вами инструкции:

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

После того, как у вас есть статическая библиотека, скомпилированная с помощью инструментальной цепочки Android, вы можете легко связать ее через модуль, аналогичный модулю include/[NAME OF NEW SUBMODULE] проекта выше. Для файла Android.mk в корне этого каталога используйте что-то похожее на следующее:

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)

Наконец, импортируйте этот модуль, как в примере, внутри

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

По всем другим вопросам - знаете ли вы о приложении, использующем Boost на iOS и Android? Да, я сделал это несколько раз с успехом и выпустил рабочие приложения в App Store.

Ваш другой вопрос, целесообразно ли использовать boost для сетевого общения? Я не уверен, что вы имеете в виду здесь. С какого угла? Вы имеете в виду, философски, технически и т.д.?

Философски, вы должны спросить себя, каковы ваши аргументы в пользу импорта этой библиотеки и использования ее между Android и iOS. Это экономить время кода, нагрузка на обслуживание. Если это так, я бы сказал, что это отличный способ сделать это. Ясно, что есть некоторые препятствия и боль, чтобы получить такую ​​работу. Кроме того, функции IDE для С++ не так велики, как для Java в Eclipse. Я стараюсь быть справедливым и сбалансированным в презентации PDF в каталоге doc/. Дайте это один раз.

С технической точки зрения, я думаю, что единственное, что меня беспокоит, - это убедиться, что я правильно очищаю объекты Asio, когда активность остановлена. Если вам нужно сделать что-то в фоновом режиме, используйте службу вместо:

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

Ответ 3

ОБНОВЛЕНИЕ:. По-видимому, проблема связана с std:: atomic на Android, и поскольку Boost.Asio использует ее (по умолчанию), в сочетании с потоками, один из них иногда зашел в тупик. К счастью, Boost.Asio упрощает переход от Std.Atomic к Boost.Atomic, и об этом позаботился в проекте Boost-for-Android в этот коммит.

Для получения дополнительной информации об ошибке см. здесь


Мы разрабатываем простую многопользовательскую игру (еще не выпущенную) для Android с использованием boost asio, и до сих пор у нас не было никаких проблем. Это для вопроса № 2.

Какие проблемы вы видите?

Если проблемы связаны с компиляцией и связыванием, возможно, эти подсказки окажутся полезными.

Добавьте в свой файл AndroidManifest.xml следующее:

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

Имейте это в своем файле Application.mk:

APP_STL := gnustl_static
APP_CPPFLAGS += -frtti -fexceptions

И используйте это как шаблон для вашего файла Android.mk:

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: Как мы наращиваем поддержку Android. Это то, что мы имеем в нашем 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

Обратите внимание, что мы используем нашу собственную версию Boost-for-Android, это только потому, что у нее есть патч для новейшей версии NDK r8d. Из командной строки также видно, что мы используем версию повышения 1.49, это в настоящее время самое высокое, поддерживаемое Boost-for-Android.

Если вы хотите узнать, какие комбинации Boost и Android NDK поддерживаются, посмотрите проект Boost-for-Android. Он содержит каталоги, называемые патчами /boost -< X > /ndk-android < Y > , где X соответствует поддерживаемой версии boost и Y к поддерживаемой версии NDK (бесстыдный плагин: наши 2 цента к проекту: -)).

Ответ 4

Ниже приведена еще одна (очень полезная) информация, полученная от сообщества boost:

  • Есть ли какая-то конкретная причина для этого (например, не оптимизирована для встроенные устройства)? Или любая другая причина?

Boost отлично работает на Android. Поскольку существует NDK (собственный набор для разработки) с довольно приличным gcc (4.6) вам просто нужно настроить boost build для использования правой gcc. Хотя это все работает, для этого требуется немного чтобы правильно настроить настройки. Но опять же, в принципе, нет много разницы в создании Boost для Android или любых других Linux распределение.

  1. Существуют (вообще) любые известные проблемы, если мы используем библиотеки boost для сетевая и синхронизация потоков для приложения Smartphone развитие? Будет ли неплохо использовать BOOST ASIO для того же?

Совершенно нормально использовать Boost.Thread или Boost.Asio. Они отлично работают на устройствах ARM. Существует даже поддержка более специфичных для платформы хакеров например boost.atomic и boost.context.

FYI - найденные ссылки https://github.com/MysticTreeGames/Boost-for-Android http://www.codexperiments.com/android/2011/05/tips-tricks-building-boost-with-ndk-r5/

Усиление роста с помощью Android NDK еще проще, чем с boost.build непосредственно. Я собрал кучу скриптов для сборки Android, которые можно найти Вот: https://github.com/STEllAR-GROUP/HPXAndroid/tree/master/modules Посмотрите на boost _ ${module} для различных библиотек boost. Это не полный список. Только то, что мне нужно. Кроме того, может понадобиться любовь к 1.53. Все разные библиотеки не нуждались в специальном лечении с помощью андроида (по модулю некоторые мелкие ошибки, когда компилятор не соглашался с другими версиями gcc)

Я надеюсь, что это будет полезно и для других! Спасибо!