web-dev-qa-db-ja.com

AndroidおよびiOSの公式「ブーストライブラリ」サポート?

この質問は AndroidでBoost AsioまたはAysnc Socketスレッドを選択する必要がありますか? に続きます。

Boostライブラリは広く有用であり、幅広いアプリケーションで使用できることを目的としていますが、AndroidおよびiOS

  1. 組み込みデバイス向けに最適化されていないなど、同じ理由がありますか?または他の理由は?
  2. AndroidまたはiOSでBoostを使用して構築されたアプリケーションを知っている人はいますか?
  3. 通信用に複数のスレッドを生成するネットワーク集約型アプリケーションにブーストライブラリを使用することをお勧めしますか?

参考までに、サンプルAndroid applicationを作成するために次のリンクを使用していますが、まだ成功していません:(

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

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

AndroidにBoost C++ライブラリを含める

Android NDK and STLport を指定してboostライブラリ(shared_ptrを含む)を使用する方法

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およびC++例外のサポート

前もって感謝します。

50
RDX

Boostコミュニティから返信がありますはい。これらのプラットフォームは、回帰テストを定期的に実行しようとするボランティアがいないため、公式にはサポートされていません。

Boost開発者がすべてのプラットフォームでテストすることはできません。そのため、開発者はボランティアが実行した回帰テストのテスト結果に依存しています。たとえば、 http://beta.boost.org/development/tests/trunk/developer/summary.html を参照してください

特定のプラットフォームのテストを実行しようとするボランティアがいない場合、そのプラットフォームは正式にサポートされていません。

AndroidまたはiOSが正式にサポートされるようになったら、Boostの定期的な(できれば毎日)回帰テストを実行してください。 http://beta.boost.org/development/ running_regression_tests.html

24
RDX

Githubでクロスプラットフォームチュートリアルをご覧ください。 Boostを設定し、iOSとAndroidの間で使用する方法を示します。私はこれで非常に恐ろしい時間を過ごしました、私はそれを文書化すると思いますので、誰もそれを理解する必要がありませんでした。このプロジェクトは、CoreFoundationとSQLiteなど、2つのプラットフォーム間で使用されるいくつかの他の一般的なアイテムも取り込むことがわかります。

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])

他の質問に関しては、iOSおよびAndroidでBoostを使用するアプリケーションをご存知ですか?はい、私はそれを複数回成功させて、App Storeに機能するアプリをリリースしました。

他の質問として、ネットワーク通信にブーストを使用することをお勧めしますか?ここで何を意味するのか分かりません。どの角度から?哲学的に、技術的になど、どういう意味ですか?

哲学的には、このライブラリをインポートし、AndroidとiOSの間で使用する理由は何ですか。コード時間とメンテナンスの負担を節約するためですか。明らかに、この種のセットアップを機能させるにはいくつかのハードルと痛みがあります。また、C++のIDE機能は= Javaです。doc/ディレクトリでのPDFプレゼンテーションで公平でバランスを取るようにしています。もう一度やり直してください。

技術的な観点からは、アクティビティが停止したときにAsioオブジェクトを適切にクリーンアップすることを確認することだけが心配だと思います。バックグラウンドで処理する必要がある場合は、代わりにサービスを使用します。

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

15
markshiz

UPDATE:Androidのstd :: atomicに問題があるようです。Boost.Asioが(デフォルトで)スレッドと組み合わせて使用​​しているため、時々デッドロックに陥りました。幸いなことにBoost.Asioを使用すると、Std.AtomicからBoost.Atomicに簡単に切り替えることができ、これは this commitBoost-for-Android プロジェクトで処理されます。

バグの詳細については、 こちら をご覧ください


ブーストasioを使用してAndroidを使用したシンプルなマルチプレイヤーゲーム(まだリリースされていない)を開発していますが、これまでのところ問題はありませんでした。

どのような問題が発生していますか?

問題がコンパイルとリンクに関連している場合、これらのヒントが役立つ可能性があります。

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)

編集: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のパッチがあるためです。 Boostの1.49バージョンを使用していることもコマンドラインから確認できます。これは現在、Boost-for-Androidでサポートされている最高のものです。

BoostとAndroid NDKのどの組み合わせがサポートされているかを知りたい場合は、Boost-for-Androidプロジェクトをご覧ください。patch/ boost-<[〜#〜] x [〜#〜]>/ndk-Android <[〜#〜] y [〜#〜 ]>ここで、[〜#〜] x [〜#〜]はサポートされているブーストバージョンに対応し、[〜#〜] y [〜#〜]サポートされているNDKバージョン(恥知らずのプラグイン:プロジェクトへの2セント:-))。

12
Peter Jankuliak

以下に、ブーストコミュニティから受信した(非常に有用な)情報をいくつか示します。

  1. 同じ理由(組み込みデバイス用に最適化されていないなど)の背後に特定の理由はありますか?または他の理由は?

BoostはAndroidで完全に機能します。かなりまともなgcc(4.6の何か)を備えたNDK(ネイティブ開発キット)があるので、適切なgccを使用するようにブーストビルドを構成する必要があります。これはすべて機能しますが、設定を正しく行うには少し手を加える必要があります。ただし、原則として、Androidまたは他のLinuxディストリビューションの場合、Boostのビルドに大きな違いはありません。

  1. スマートフォンアプリケーション開発のためにネットワーキングとスレッド同期にブーストライブラリを使用する場合、既知の問題は(まったく)ありますか? BOOST ASIOを同じものに使用することをお勧めしますか?

Boost.ThreadまたはBoost.Asioを使用してもまったく問題ありません。 ARMデバイスで完全に動作します。boost.atomicやboost.contextなどのプラットフォーム固有のハッカーに対するサポートもあります。

参考までに見つかったリンク https://github.com/MysticTreeGames/Boost-for-Androidhttp://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}を探します。これは完全なリストではなく、必要なものだけです。また、1.53への愛情も必要になるかもしれません。すべての異なるライブラリは、特別なAndroid処理を必要としませんでした。

これが他の人にも役立つことを願っています!ありがとう!

11
RDX