我已经尝试了很长时间将Boost和Android在Windows上结合起来,尝试了很多方法但仍然没有成功。我想使用Boost库在Android上制作一个示例程序。我正在按照这里的教程进行操作。
如此教程建议的那样,我将我的Boost库保留在****(Android NDK)\sources\boost_1_44_0****,并且成功地编译了它。
然后我在sources/boost_1_44_0内创建了一个Android.mk文件,并输入我想要使用的每个库的条目。在这种情况下,lib文件是libboost_date_time-gcc-mt-s-1_44.a,位于boost_1_44_0/android/lib/中。
以下是Android.mk文件的内容。
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_date
LOCAL_SRC_FILES:= boost_1_44_0/android/lib/libboost_date_time-gcc-mt-s-1_44.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
现在的下一步是在我的项目目录中,jni文件夹内创建一个 Android.mk 文件(用于创建共享库)。以下是其内容。
LOCAL_PATH := $(call my-dir)
include $(call all-subdir-makefiles)
include $(CLEAR_VARS)
# Here we give our module name and source file(s)
LOCAL_LDLIBS := -llog -ldl
LOCAL_MODULE := ndkfoo
LOCAL_SRC_FILES := ndkfoo.cpp
LOCAL_STATIC_LIBRARIES := boost_date
include $(BUILD_SHARED_LIBRARY)
$(call import-module,boost_1_44_0)
这是位于同一位置(jni文件夹内)的Application.mk文件。Application.mk文件的内容如下:
APP_STL = gnustl_static #(or APP_STL = stlport_static as required)
APP_CPPFLAGS = -fexceptions
最后,这是我的ndkfoo.cpp文件。
#include <string.h>
#include <jni.h>
#include <stdio.h>
#include <boost/date_time.hpp>
using namespace boost::gregorian;
void Java_com_ndkfoo_NdkfooActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) {
date weekstart(2002,Feb,1);
}
这个程序可能是错误的,问题在于它无法识别任何boost头文件或函数,并且我总是得到编译错误。
我是否漏掉了什么或者做错了什么?非常感谢任何帮助。
编辑:这个问题包含你需要在Android中引入Boost库的所有内容。有关更多提示,请查看下面我的答案。希望这对你也有用。
谢谢。