如何在Android NDK中使用Asio(Boost独立)?

时间:2013-01-03 08:56:19

标签: android c++ android-ndk boost-asio

Asio(没有Boost)应该仅适用于标题吗?

  

默认情况下,Asio是一个仅限标头的库。 (http://think-async.com

据我所知,内部Asio仍然依赖于Boost。

这是我的设置。

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE        := gatelib
LOCAL_SRC_FILES     := gatelib.cpp
LOCAL_C_INCLUDES    += /cygdrive/l/asio-1.5.3/include
LOCAL_C_INCLUDES    += /cygdrive/l/boost/boost_1_49_0

include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_STL := stlport_static
APP_CFLAGS += -DBOOST_DATE_TIME_NO_LIB -DBOOST_REGEX_NO_LIB

gatelib.cpp

#include <jni.h>
#include <asio.hpp>

#ifdef __cplusplus
extern "C" 
{
#endif
    // rest of code ...

#ifdef __cplusplus
}
#endif

构建脚本

@echo on

@set BASHPATH="L:\cygwin\bin\bash"
@set PROJECTDIR="/cygdrive/l/AsioAndroid/AsioDemo"
@set NDKDIR="/cygdrive/l/android-ndk-r8c/ndk-build"

%BASHPATH% --login -c "cd %PROJECTDIR% && %NDKDIR%

@pause:

输出

http://pastebin.com/XiJjvNmp

所以基本上,我想要实现的是,让Asio在Android上工作(通过NDK)。是的,只是 Asio本身,而不是Boost附带的Asio。问题出现在输出中。我根本不知道......

PS。没有Asio标签,所以我想Boost-Asio标签现在必须做。

1 个答案:

答案 0 :(得分:5)

这就是我的所作所为。

<强> Application.mk

APP_STL := gnustl_static
APP_CFLAGS += -DBOOST_DATE_TIME_NO_LIB -DBOOST_REGEX_NO_LIB
APP_CPPFLAGS += -fexceptions

线索和提示遍布Stack Overflow。一旦拼凑起来,它就有效了!