• Android.mk文件和Application.mk文件详解


    Android.mk文件和Application.mk文件详解

    相同点:都是轻量级 Makefile(Makefile文件定义一些列指令,指定文件编译顺序,类似shell脚本)

    Application:

    位置:通常在 $PROJECT/jni目录下

    作用:配置所有modules的编译变量在 APP_ABI := xxx xxx xxx   设置中间有空格

               可以设置一个或多个ABI对应的指令集

    指令集合(armeabi,armeabi-v7a,arm64-v8a,x86,x86_64,mips,mips64,all) all全部对应

    关于指令集的选择:

             armeabi-v7a兼容armeabi

    x86手机因兼容性基本都使用libhoudini模块,兼容arm指令集

    64位默认兼容32位abi的so

    所以:对大小严格要求选择 armeabi,对性能也有要求添加 x86

    APP_OPTM(编译模式)

             默认release  可修改为debug

    Android.mk文件

    包含:

    1.  宏:my-dir,all-subdir-makefiles等   在$(call <function>)调用,返回文本信息

    2.  变量:CLEAR_VARS,BUILD_SHARED_LIBRARY,TARGET_ARCH等,NDK提供,在Android.mk被解析前存在

    3.  模块描述变量:LOCAL_PATH,LOCAL_MODULE,LOCAL_SRC_FILES等(LOCAL_前缀),除LOCAL_PATH外其余都在include $(CLEAR_VARS)和include $(BUILD_XXX)之间。

    LOCAL_PATH(当前目录):

             my-dir:通常最后一次包含Makefile文件路径,通常是Android.mk所在路径

    CLEAR_VARS(变量清除):

             除LOCAL_PATH外的其余在include $(CLEAR_VARS)和include $(BUILD_XXX)之间的变量

    BUILD_EXECUTABLE

    LOCAL_MODULE(module名称)

    LOCAL_SRC_FILE(源码文件)

    BUILD_SHARED_LIBRARY(动态编译)                    BUILD_STATIC_LIBRARY(静态编译)

    PREBUILD_SHARED_LIBRARY(动态预编译)    PREBUILD_STATIC_LIBRARY(静态预编译)

    BUILD_EXECUTABLE(生成可执行的文件)

    TARGET_ARCH_ABI(目标ABI名称)

    LOCAL_LDLIBS(链接库)

             用额外链接选项,所有库都有“-l”前缀,可同时列出空格隔开

    LOCAL_CFLAGS,LOCA_CPPFLAGS和LOACL_LDFLAGES(编译,链接标志)

    LOCAL_CFLAGS: 编译C/C++传递给编译器的标志集合

    LCOAL_CPPFLAGS: 只支持C++传递给编译器的标志集合

    LOCAL_LDFLAGES: 传递给连接器的额外参数

    编译选项格式(LOCAL_CPPFLAGES += XXX)

             1.-fexception:NDK异常处理默认禁止,可以编译带异常处理的C++代码

             2.-ftti:NDK默认不支持C++RTTI,可以编译带RTTI的C++代码

             3.-fvisibility=hidden:隐藏不需要导出的函数,若某个函数需要导出添加JNIEXPROT或者__attribute__((visibility(“default”)))即可

             4.-lfunction-section:默认编译文件.o中代码部分只有.text段,会使每个函数都单独

    有一个段。对链接后代码大小并没有影响

             5.-fdata-section:同上每个data都有一个单独的段

             6.-Wl—gc-sections:使用连接器ld链接时删除不用的段

    -Wl,<option>告诉编译器,后边选项<option>传递给连接器

             7.-fPIC:PIC(position independent code)用于编译位置无关代码,生成可用于共享库的位置独立代码。若不添加-fPIC,加载so文件的代码段时,代码段引用的数据对象需要重

    定位,重定位会修改代码段内容,造成,没有调用这个so,代码段的进程在内核中会产生着个文件拷贝。

             8.-Wall:(wring all)编译和链接中显示所有警告信息

     关闭PIE:

    1. LOCAL_CFLAGS += -pie -fPIE
    2. LOCAL_LDFLAGS += -pie -fPIE

    Android.mk通用格式:

    LOCAL_PATH := $(call my-dir)

    include $(CLEAR_VARS)

    LOCAL_ARM_MODE := arm

    LOCAL_MODULE    := helloworld

    LOCAL_SRC_FILES := helloworld.c

    include $(BUILD_EXECUTABLE)

    Application.mk通用格式

    APP_ABI := x86 armeabi-v7a

  • 相关阅读:
    gulp的使用
    Js中call(),apply()的使用
    HTML中<meta>标签的使用
    字符串及数组常用方法
    css—transform
    《Java设计模式》——适配器模式
    全文检索工具包Lucene以及企业及应用Solr的学习(二)—— solr中edismax用到的Query Function以及java扩展
    全文检索工具包Lucene以及企业及应用Solr的学习(一)
    最近发现服务器发生了一些问题
    TxT读取写入
  • 原文地址:https://www.cnblogs.com/heixiang/p/10964038.html
Copyright © 2020-2023  润新知