更新: Androidのstd :: atomicに問題があるようです。また、Boost.Asioが(デフォルトで)スレッドと組み合わせて使用しているため、デッドロックが発生することがあります。幸い、Boost.Asioを使用すると、Std.AtomicからBoost.Atomicに簡単に切り替えることができます。これは、このコミットのBoost-for-Androidプロジェクトで処理されています。
バグの詳細については、こちらをご覧ください
Boost asioを使用したAndroid向けのシンプルなマルチプレイヤーゲーム(まだリリースされていません)を開発しており、これまでのところ問題はありませんでした。質問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)
編集: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を使用していることがわかります。これは、現在、Boost-for-Androidでサポートされている最高のバージョンです。
BoostとAndroidNDKのどの組み合わせがサポートされているかを知りたい場合は、Boost-for-Androidプロジェクトの内部をご覧ください。これには、patches / boost- < X > / ndk-android < Y >というディレクトリが含まれています。ここで、Xはサポートされているブーストバージョンに対応し、YはサポートされているNDKバージョンに対応します(恥知らずなプラグ:プロジェクトへの2セント:-))。