在android中包含Boost C ++库

我一直试图在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.a,可在boost_1_44_0 / android / lib /中find
这是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  #include  #include  #include  using namespace boost::gregorian; void Java_com_ndkfoo_NdkfooActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) { date weekstart(2002,Feb,1); } 

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

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

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

谢谢。

  • 没有JNI_OnLoad在...中跳过init
  • 没有JNI_OnLoad发现跳过init>应用程序关闭
  • 从C代码中设置/获取Java List <>
  • 用JNI复制一个字节缓冲区
  • 获取有效的JNIEnv指针
  • 如何在Android Studio中添加.so,.mk和其他本机文件?
  • 从Libjpeg-turbo优化中获得哪些Android设备的好处?
  • ndk-stack不工作
  • 我的问题包含几乎完整的步骤,包括在android中的BOOST库。 但是在使用它时仍然需要记住一些重要的观点。

    • 删除自动生成的objlib s文件夹每次编译本机代码之前。

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

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

      extern C { /*cpp code*/ }

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