官方"Boost库"支持Android和iOS?

RDX*_*RDX 51 android boost boost-asio android-ndk ios

这个问题是继续我应该在Android中选择Boost Asio或Aysnc Socket线程吗?问:

Boost库旨在广泛使用,并可在各种应用程序中使用,但Android和iOS尚无官方支持

  1. 是否有任何特定原因,例如未针对嵌入式设备进行优化?还是其他任何原因?
  2. 有没有人知道在Android或iOS上使用Boost构建的任何应用程序?
  3. 是否建议将升级库用于网络密集型应用程序,从而产生多线程进行通信?

仅供参考.我一直在使用以下链接创建示例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++库

如何将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和支持C++异常

提前致谢.

RDX*_*RDX 24

得到了社区的回复是的.这些平台没有得到官方支持,因为没有人自愿为他们定期运行回归测试.

Boost开发人员无法在所有平台上进行测试.因此开发人员依赖于志愿者运行的回归测试的测试结果.例如,请参阅 http://beta.boost.org/development/tests/trunk/developer/summary.html

如果没有人自愿为特定平台运行测试,则该平台不受官方支持.

因此,如果您关心Android或iOS正式支持,请开始为Boost运行常规(最好每天)回归测试.见http://beta.boost.org/development/running_regression_tests.html

  • CrystaX https://www.crystax.net/项目自2015年3月起推出针对Android的定期回归测试http://www.boost.org/development/tests/master/developer/summary.html http://habrahabr.ru/post/253233 /(rus) (4认同)
  • 我很乐意通过运行夜间回归测试来使用我的一些工作硬件.问题是编译是跨平台的,对制作应用程序有特定的要求(你不能在这些平台上制作控制台应用程序),测试需要在外部设备/模拟器/模拟器上运行.据我所知,现有的测试套件没有配备.但是,我愿意与更加熟悉增强测试的人合作,为此努力.我的名字(at)brainiumstudios.com (3认同)

mar*_*hiz 17

看看我在github上的跨平台教程.它向您展示了如何设置Boost并在iOS和Android之间使用它.我有这么可怕的时间,我想我会记录下来,所以没有人不得不弄明白.你会注意到这个项目还引入了两个平台之间使用的其他几个常用项目,例如CoreFoundation和SQLite.

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

注意:我的教程没有说明如何为boost构建编译库.在使用您提供的说明成功之前,我已经做到了这一点:

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)
Run Code Online (Sandbox Code Playgroud)

最后,导入该模块,如示例中所示

$(call import-module,[NAME OF NEW SUBMODULE])
Run Code Online (Sandbox Code Playgroud)

至于你的其他问题 - 你知道在iOS和Android上使用Boost的应用吗?是的,我已经成功完成了多次,并将应用程序发布到App Stores.

您的另一个问题是,建议使用boost进行网络通信吗?我不确定你的意思.从什么角度来看?你的意思是,在哲学上,技术上等等吗?

从哲学上讲,你必须问自己,你导入这个库并在Android和iOS之间使用它的原因是什么.是节省代码时间,维护负担.如果是这样,我会说这是一个很好的方法.显然,让这种设置工作有一些障碍和痛苦.此外,C++的IDE功能并不像Eclipse中的Java那样棒.我试着在doc/目录中的PDF演示文稿中保持公平和平衡.再给它一次.

从技术角度来看,我认为我唯一担心的是确保在Activity停止时正确清理Asio对象.如果您需要在后台执行操作,请改用服务:

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


Pet*_*iak 12

更新:似乎有性病的问题::在Android原子,由于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>
Run Code Online (Sandbox Code Playgroud)

在您的Application.mk文件中有这个:

APP_STL := gnustl_static
APP_CPPFLAGS += -frtti -fexceptions
Run Code Online (Sandbox Code Playgroud)

并将其用作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)
Run Code Online (Sandbox Code Playgroud)

编辑:我们如何为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
Run Code Online (Sandbox Code Playgroud)

请注意,我们使用自己的Boost-for-Android分支,这只是因为有一个补丁用于最新的NDK版本r8d.从命令行可以看出我们正在使用1.49版本的boost,这是目前Boost-for-Android支持的最高版本.

如果您想知道支持Boost和Android NDK的哪些组合,请查看Boost-for-Android项目.它包含名为patches/boost- < X >/ndk-android < Y >的目录,其中X对应支持的升级版本,Y对应支持的NDK版本(无耻插件:我们对项目的2美分:-)).


RDX*_*RDX 11

以下是来自boost社区的更多(非常有用)信息:

  1. 是否有任何具体原因(如未针对嵌入式设备进行优化)?还是其他任何原因?

Boost在Android上完美运行.由于有一个NDK(本机开发工具包)具有相当不错的gcc(4.6个东西),你只需要配置boost build以使用正确的gcc.虽然这一切都有效,但需要进行一些修改才能正确设置.但是,原则上,构建Boost for Android或任何其他Linux发行版没有太大区别.

  1. 如果我们使用boost库进行智能手机应用程序开发的网络和线程同步,是否存在(根本没有)任何已知问题?使用BOOST ASIO会是一个好主意吗?

使用Boost.Thread或Boost.Asio是完全没问题的.它们在ARM设备上运行得非常好.甚至支持更多特定于平台的hackeries,如boost.atomic和boost.context.

仅供参考找到链接 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库的boost _ $ {module}.这不是一个完整的列表.只有我需要的.此外,可能需要1.53的爱.所有不同的库都不需要任何特殊的android处理(模块化编译器不同意其他gcc版本的一些小错误)

我希望这对其他人也有用!谢谢!