在android中包含Boost C++库

N-J*_*JOY 21 c++ java-native-interface android boost

我一直试图在Windows上与Boost和android结婚很长时间并尝试了很多方法,但仍然没有运气.我想在android中使用Boost库制作一个示例程序.我在这里关注本教程.

正如本教程建议我将我的Boost lib保存在****(Android NDK)\ sources\boost_1_44_0****中成功编译.

然后我在sources/boost_1_44_0中创建了一个Android.mk文件,并输入了我想要使用的每个库的条目.在这种情况下,lib.文件是libboost_date_time-gcc-mt-s-1_44.aboost_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) 
Run Code Online (Sandbox Code Playgroud)

现在,下一步是在我的项目目录中,在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) 
Run Code Online (Sandbox Code Playgroud)

这是放在jni文件夹内的同一位置的Application.mk文件.Application.mk文件的内容如下:

APP_STL      = gnustl_static #(or APP_STL = stlport_static as required)
APP_CPPFLAGS = -fexceptions  
Run Code Online (Sandbox Code Playgroud)

最后这是我的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);

}
Run Code Online (Sandbox Code Playgroud)

这个程序可能不正确,但问题是它无法识别任何提升标题或功能.我总是得到编译错误.

我有什么遗失或做错了吗?任何帮助将非常感激.

编辑: 这个问题包含在android中包含Boost库所需的一切.有关更多提示,请查看下面的答案.希望这对你也有用.

谢谢.

N-J*_*JOY 5

我的问题包含几乎完整的步骤,包括在android中的BOOST库.但是在使用它时仍然需要记住一些重要的观点.

  • 删除auto generated objlibs文件夹每次编译本机代码之前.

  • 如果要用C++编写本机代码,请添加LOCAL_CPP_EXTENSION := .cpp到Android.mk(jni/Android.mk)文件中.

  • 如果您要使用C++编写代码,请将所有cpp代码放入其中extern "C" {}.

    extern C { /*cpp code*/ }

  • 不要放弃,要耐心并继续努力.;).