JNI常见问题(问题查询笔记)2
1.编译(ndk-build):
Android.mk文件:
LOCAL_PATH := $(call my-dir):指向编译目标文件的位置,这里是本目录,开头必填项
include $(CLEAR_VARS):清除之前系统中存在的LOCAL_XXX变量,因为是全局的
LOCAL_MODULE:编译成为模块的名字
LOCAL_SRC_FILES:编译包含的源文件,需要注意看Android.mk文件中的LOCAL_SRC_FILES选项是否包含了必要文件(不要忘了自己写的那个连接Java的调用文件),可以这样写来包含文件夹下的所有c文件LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.c)
LOCAL_LDLIBS:依赖库,连接的是NDK目录下的android-ndk-r9b\platforms\android-19\arch-arm\usr\lib中的so文件
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true:忽略掉未定义的错误
LOCAL_ARM_MODE := arm:指定编译的指令集
LOCAL_PRELINK_MODULE :Prelink利用事先链接代替运行时链接的方法来加速共享库的加载
LOCAL_MODULE_TAGS :=user eng tests optional
user: 指该模块只在user版本下才编译
eng: 指该模块只在eng版本下才编译
tests: 指该模块只在tests版本下才编译
optional:指该模块在所有版本下都编译
结尾要指向一个编译选项:
- include $(BUILD_STATIC_LIBRARY) :编译成为一个静态库,不能被项目引用,用来生成动态库
- include $(BUILD_EXECUTABLE) :编译成为一个可执行的本地程序
- include $(BUILD_SHARED_LIBRARY):编译为一个共享库,.so文件,我们通常用的
TO BE CONTINUE