在android中加入Boost C++库

问题描述 投票:21回答:1

我一直在尝试在windows上将Boost和android结合起来,尝试了很多方法,但还是没有成功。我想在android中使用Boost库制作一个示例程序。我是按照这个教程来做的 这里。

按照本教程的建议,我把我的Boost库保存在***(Android NDK)\\sources\boost_1_44_0***中,并成功编译。

然后我做了一个 Android.mk 文件内的 来源boost_1_44_0 并为每个我想使用的库做了记录。在这种情况下,lib.文件是 libboost_date_time-gcc-mt-s-1_44.a 可在 升压_1_44_0androidlib。 以下是内容 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) 

现在下一步是制作一个 Android.mk 文件在我的项目目录下,在 jni 文件夹(这是为了创建一个共享库。)。这里是它的内容。

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) 

这里是Application.mk文件,放在同样的位置,位于 jni 文件夹。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 headers或函数,我总是得到编译错误。

是否有什么地方我遗漏了或做错了?任何帮助将是非常感激的。

EDIT: 这个问题包含了在android中加入Boost库所需要的一切。更多的技巧请看下面我的回答。希望这对你也有用。

谢谢。

android c++ boost java-native-interface
1个回答
5
投票

我的问题中包含了几乎完整的在Android中加入BOOST库的步骤。但在使用时,还是有一些重要的点需要你记住。

  • 删除自动生成的程序 objlib的文件夹,然后再编译你的本机代码。

  • 如果你要用C++写你的本地代码,请在编译前加入 LOCAL_CPP_EXTENSION := .cpp 到你的Android.mk(jni/Android.mk)文件。

  • 如果你要用C++编写代码,请把你所有的cpp代码放在 extern "C" {}.

    extern C { /*cpp code*/ }

© www.soinside.com 2019 - 2024. All rights reserved.