UPDATE:似乎有要與標準::原子在Android上的問題,而且由於Boost.Asio的是使用它(默認情況下),結合線程,一個偶然得到了僵持。幸運的是,Boost.Asio可以很容易地從Std.Atomic轉換到Boost.Atomic,項目this commit已經完成了這項工作。
有關錯誤的詳細信息,請參閱here
我們使用升壓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
注意,我們使用的是我們自己的升壓換安卓的前叉,這僅僅是因爲一個擁有最新版本NDK一個R 8d中的補丁。從命令行也可以看出,我們正在使用1.49版本的boost,這是目前最高支持的Boost-for-Android。
如果您想知道Boost和Android NDK支持哪些組合,請查看Boost-for-Android項目。它包含目錄稱爲補丁/助推< X>/NDK-的Android < Ÿ>其中X對應於支持增強版和ÿ的支持NDK版本(無恥插頭:我們2美分至項目:-))。
從技術上說,你會希望官方支持這些平臺而不是_ports_。 –
是智能手機應用程序開發的明智之舉嗎? – RDX
FWIW,我成功地爲iOS和Android構建了我的應用程序(相當廣泛地使用boost)。我認爲缺乏「官方」支持的主要原因是沒有人自願爲這些平臺運行發佈測試。 –