【问题标题】:Include Boost C++ library in android在 android 中包含 Boost C++ 库
【发布时间】:2011-12-14 16:24:26
【问题描述】:

我长期以来一直试图在 Windows 上将 Boost 和 android 结合起来,并尝试了很多方法,但仍然没有运气。我想在android中使用Boost库制作一个示例程序。我正在关注本教程here.

按照本教程的建议,我将 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 headers 或函数。我总是得到编译错误。

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

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

谢谢。

【问题讨论】:

  • 一方面:您的路径略有不同:在教程中作者已提取到 $ANDROID_NDK/sources/boost。不确定这是否会有所作为。作者的 lib 路径以 android/.. 开头,您的路径以 boost_1_44_0/android/.. 开头。我会首先尝试完全按照教程进行操作,看看是否能解决您的问题。
  • 是的,但我认为这可能没有任何区别。
  • 敲敲有人在吗?请帮帮我.....
  • 您是否尝试过使用“ndk-build V=1”来查看包含是否正确?该日志可能会为我们提供更多线索。
  • 嗨! @paul 您是否尝试运行 bjam 或 b2。它是一个编译 boost 的工具。看看这个链接。 codexperiments.com/android/2011/05/…我已经在我的帖子中提到了这个链接。

标签: android c++ boost java-native-interface


【解决方案1】:

我的问题包含了在 Android 中包含 BOOST 库的几乎完整的步骤。但是在使用它时,您仍然应该记住一些重要的点。

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

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

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

    extern C { /*cpp code*/ }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-28
    • 2010-11-21
    • 2013-06-15
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    相关资源
    最近更新 更多