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.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)
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库所需的一切.有关更多提示,请查看下面的答案.希望这对你也有用.
谢谢.
我的问题包含几乎完整的步骤,包括在android中的BOOST库.但是在使用它时仍然需要记住一些重要的观点.
删除auto generated obj和libs文件夹每次编译本机代码之前.
如果要用C++编写本机代码,请添加LOCAL_CPP_EXTENSION := .cpp到Android.mk(jni/Android.mk)文件中.
如果您要使用C++编写代码,请将所有cpp代码放入其中extern "C" {}.
extern C { /*cpp code*/ }
不要放弃,要耐心并继续努力.;).
| 归档时间: |
|
| 查看次数: |
12929 次 |
| 最近记录: |