研一
ABI
在使用ndk编译的时候总是需要在Application.mk文件中对APP_ABI进行选择,今天对ABI进行了初步了解。
ABI是application-binary-interface的缩写,是操作系统和应用程序,应用程序和他下面的库交流的接口。在编译阶段,链接器需要对不同的目标ABI进行不同的处理,如进行数据首地址对齐,静态变量地址表的生成,内存地址的使用等方面。ABI包含的意义一方面可以是目标机器的系统规定,另一方面也可以理解为生成的打包程序的版本信息。
在编译选项中,使用APP_ABI := armabi编译32位的安卓库,使用APP_ABI := x86 armabi_v7a编译32位的安卓库,APP_ABI := arm64-v8a编译64位的安卓库。
Android.mk和Application.mk学习
以上两个文件都是ndk编译时的make文件,不同于gcc编译make文件的地方是仅仅需要编写参数变量的值,很多依赖关系,编译语句都被ndk所封装好了,并不需要再编写,省了很多的事,因此ndk编译的学习只需要对变量类型进行细致的了解。
LOCAL_PATH := $(call my-dir)
#module1
include $(CLEAR_VARS)
LOCAL_MODULE := module1
LOCAL_SRC_FILES := module1.c
include $(BUILD_SHARED_LIBRARY)
LOCAL_PATH := $(call my-dir)
#module2
include $(CLEAR_VARS)
LOCAL_MODULE := module2
LOCAL_SRC_FILES := module2.c
LOCAL_SHARED_LIBRARIES := module1
include $(BUILD_SHARED_LIBRARY)
$(call import-module, code/libjson, code/libparse)
LOCAL_PATH := $(call my-dir)
#module prebuilt
include $(CLEAR_VARS)
LOCAL_MODULE := pre_builtmodule
LOCAL_SRC_FILES := module1.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include/foo.h
include $(PREBUILT_SHARED_LIBRARY)
#module2
include $(CLEAR_VARS)
LOCAL_MODULE := shared_module2
LOCAL_SRC_FILES := pre_builtmodule
include $(BUILD_SHARED_LIBRARY)
SET -e SED ‘s/str1/str2/g’
待学习