1. so库文件生成。
a).只用.c,.cpp生成库文件的。
它的android.mk文件如下:
include $(CLEAR_VARS)
LOCAL_MODULE := xxx //生成的库文件名称
LOCAL_SRC_FILES := xxx.cpp //用到的源文件
include $(BUILD_SHARED_LIBRARY)
运行cygwin,cd 到源文件目录下(既android.mk所在目录),执行$NDK_ROOT/ndk-build(这里的$NDK_ROOT/ndk-build指的是你所安装的NDK目录下的ndk-build),
会生成一个libxxx.so文件
java调用xxx.so
在java代码中应用该库。
static {
System.loadLibrary("xxx"); xxx是库文件去掉lib的名称
}
Libxxx.so要放到libs文件夹下的armeabi文件夹下
b).生成的库文件调用其他xxx.a文件的。
它的android.mk如下
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := xxx
LOCAL_SRC_FILES := xxx.cpp
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE = xxxx
LOCAL_SRC_FILES = xxxx.cpp
LOCAL_STATIC_LIBRARIES := xxx
include $(BUILD_SHARED_LIBRARY)
生成so文件同上。
java调用同上。
c).生成so文件动态调用其他so文件
cpp文件中代码:
比如so文件中有 double mub(double,double);
#include "dlfcn.h"
double (*p)(double x,double y);
const char* errmsg;
handle =dlopen("libSHello.so",RTLD_NOW);
if(handle == NULL) return -1;
dlerror();
*(void**)(&p) =dlsym(handle,"sub");
if((errmsg = dlerror()) != NULL) return -1;
double c = p(a,b);
dlclose(handle);
Android.mk文件如a)中。
生成so文件同上。
Java调用so文件如a)中。