官方的“Boost library”支持Android和iOS?
这个问题是延续到我应该select在Android Android的Boost的Asio或Aysnc套接字线程? 问:
Boost库旨在广泛使用,并可用于各种应用程序,但尚未提供针对Android和iOS的官方支持
- 有没有像embedded式设备不优化背后的任何特定原因? 或者其他原因?
- 任何机构是否知道在Android或iOS上使用Boost构build的任何应用程序?
- build议使用boost库来进行networking密集型应用程序,这种应用程序会产生multithreading通信?
FYI ..我一直使用下面的链接来创build一个示例Android应用程序,但不成功:(
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和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 ++exception的支持
提前致谢。
从助推社区得到答复是的。 这些平台没有得到正式的支持,因为没有人自愿为他们定期进行回归testing。
Boost开发人员不可能在所有平台上进行testing。 所以开发人员依靠志愿者运行的回归testing的testing结果。 例如,请参阅http://beta.boost.org/development/tests/trunk/developer/summary.html
如果没有人愿意为特定的平台运行testing,那么这个平台不是官方的支持。
因此,如果您关心的是Android或iOS正式支持,请开始运行Boost的定期(最好每天)回归testing。 请参阅http://beta.boost.org/development/running_regression_tests.html
看看我在github上的跨平台教程。 它展示了如何设置Boost并在iOS和Android之间使用它。 我有这样一个可怕的时间,我想我会logging,所以没有人必须弄清楚。 您会注意到这个项目还引入了两个平台之间使用的其他几个常用项目,例如CoreFoundation和SQLite。
https://github.com/markshiz/cross-platform-tutorial
注意:我的教程没有显示如何构buildboost的编译库。 我已经使用您提供的说明成功完成了这个工作:
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-sa 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的应用程序吗? 是的,我已经多次成功地完成了它,并发布了应用程序商店的工作应用程序。
你的另一个问题是,build议使用boost来进行networking通信吗? 我不确定你在这里的意思。 从什么angular度? 你的意思是说,在哲学上,技术上呢?
在哲学上,你必须问自己,你有什么理由导入这个库,并在Android和iOS之间使用它。 是否节省代码时间,维护负担。 如果是这样,我会说这是一个很好的方法来做到这一点。 显然有一些障碍和痛苦,让这样的设置工作。 另外,用于C ++的IDEfunction并不像Eclipse中的Java那样棒。 我试图在doc/
目录中的PDF演示文稿中保持公平和均衡。 给那个一次。
从技术的angular度来看,我认为我唯一担心的就是确保在Activity停止的时候正确清理Asio对象。 如果您需要在后台执行操作,请改用服务:
http://developer.android.com/reference/android/app/Service.html
更新:在Android上似乎有一个std :: atomic的问题,并且由于Boost.Asio正在使用它(默认情况下),与线程相结合,偶尔会有一个死锁。 幸运的是,Boost.Asio可以很容易地从Std.Atomic转换到Boost.Atomic,并且在这个提交中已经在Boost-for-Android项目中处理了。
有关错误的更多信息,请参阅此处
我们正在开发一个简单的多人游戏(尚未发布)的Android使用boost asio,到目前为止,我们没有任何问题。 这是第二个问题。
你看到什么样的问题?
如果问题与编译和链接有关,那么这些提示可能会有用。
将以下内容添加到您的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)
编辑:我们如何build立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和Android NDK支持什么组合,请查看Boost-for-Android项目。 它包含名为patches / boost- < X > / ndk-android < Y >的目录,其中X对应于受支持的boost版本, Y对应于受支持的NDK版本(无耻插件:我们2美分的项目:-))。
下面是一些更多(非常有用)从助推器社区收到的信息:
- 是否有任何背后的具体原因(如未针对embedded式设备进行优化)? 或者其他原因?
Boost在Android上完美工作。 由于有一个非常像样的gcc(4.6东西)的NDK(本地开发工具包),你只需要configurationboost build来使用正确的gcc。 虽然这一切都有效,但需要一点点修补才能正确设置设置。 但是,原则上,为Android或任何其他Linux发行版构buildBoost并没有太大的区别。
- 如果我们使用增强库进行智能手机应用程序开发的联网和线程同步,是否有(任何)已知的问题? 同样使用BOOST ASIO会是一个好主意吗?
使用Boost.Thread或Boost.Asio是完全正确的。 他们在ARM设备上工作得很好。 甚至还支持更多平台特定的hackeries,比如boost.atomic和boost.context。
使用Android NDK构buildboost比直接使用boost.build更简单。 我编译了一堆Android构build脚本,可以在这里find: https : //github.com/STEllAR-GROUP/HPXAndroid/tree/master/modules查找各种boost库的boost _ $ {module}。 这不是一个完整的列表。 只有我需要的东西。 另外,可能需要1.53的一些爱。 所有不同的库不需要任何特殊的android处理(模仿一些小错误,编译器不同意其他gcc版本)
我希望这对其他人也有用! 谢谢!