【发布时间】: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