Android.mk里如何指定编译模块的输出路径

server/2024/11/29 20:16:23/

Android.mk 文件中,LOCAL_MODULE_PATH_32LOCAL_MODULE_PATH_64LOCAL_MODULE_RELATIVE_PATH 可以一起使用,以灵活地控制不同架构模块的安装路径。下面是一个详细的示例,展示如何结合使用这些变量。

示例项目结构

假设你的项目结构如下:

myproject/
├── Android.mk
├── src/
│   ├── mymodule1.c
│   └── mymodule2.c
└── jni/└── Application.mk
Android.mk

Android.mk 文件中,我们将定义两个模块,并设置它们的安装路径。

LOCAL_PATH := $(call my-dir)# 第一个模块
include $(CLEAR_VARS)LOCAL_MODULE := mymodule1
LOCAL_SRC_FILES := src/mymodule1.c
LOCAL_CFLAGS := -Wall -Wextra# 设置模块标签
LOCAL_MODULE_TAGS := eng debug# 设置 32 位模块的安装路径
LOCAL_MODULE_PATH_32 := $(TARGET_OUT)/lib32/modules# 设置 64 位模块的安装路径
LOCAL_MODULE_PATH_64 := $(TARGET_OUT)/lib64/modules# 设置模块的相对安装路径(可选)
LOCAL_MODULE_RELATIVE_PATH := modulesinclude $(BUILD_SHARED_LIBRARY)# 第二个模块
include $(CLEAR_VARS)LOCAL_MODULE := mymodule2
LOCAL_SRC_FILES := src/mymodule2.c
LOCAL_CFLAGS := -Wall -Wextra# 设置模块标签
LOCAL_MODULE_TAGS := eng debug# 设置 32 位模块的安装路径
LOCAL_MODULE_PATH_32 := $(TARGET_OUT)/lib32/utils# 设置 64 位模块的安装路径
LOCAL_MODULE_PATH_64 := $(TARGET_OUT)/lib64/utils# 设置模块的相对安装路径(可选)
LOCAL_MODULE_RELATIVE_PATH := utilsinclude $(BUILD_SHARED_LIBRARY)
Application.mk

Application.mk 文件中,你可以指定需要支持的架构。

APP_ABI := armeabi-v7a arm64-v8a x86 x86_64

构建过程

  1. 构建模块: 运行 ndk-build 命令时,LOCAL_MODULE_PATH_32LOCAL_MODULE_PATH_64LOCAL_MODULE_RELATIVE_PATH 指定的路径将被用于安装模块。

    ndk-build

解释

  • LOCAL_MODULE_PATH_32:指定 32 位模块的安装路径。在这个示例中:

    • mymodule1 的 32 位版本将被安装到 $(TARGET_OUT)/lib32/modules
    • mymodule2 的 32 位版本将被安装到 $(TARGET_OUT)/lib32/utils
  • LOCAL_MODULE_PATH_64:指定 64 位模块的安装路径。在这个示例中:

    • mymodule1 的 64 位版本将被安装到 $(TARGET_OUT)/lib64/modules
    • mymodule2 的 64 位版本将被安装到 $(TARGET_OUT)/lib64/utils
  • LOCAL_MODULE_RELATIVE_PATH:指定模块相对于目标目录的安装路径。这个变量在某些情况下可以替代 LOCAL_MODULE_PATH_32LOCAL_MODULE_PATH_64,但在这两个变量存在时,它们的优先级更高。在这个示例中:

    • mymodule1 的相对安装路径为 modules
    • mymodule2 的相对安装路径为 utils

完整示例

假设你有一个项目,需要将 mymodule1 安装到 /system/lib32/modules/system/lib64/modules,将 mymodule2 安装到 /system/lib32/utils/system/lib64/utils

Android.mk
LOCAL_PATH := $(call my-dir)# 第一个模块
include $(CLEAR_VARS)LOCAL_MODULE := mymodule1
LOCAL_SRC_FILES := src/mymodule1.c
LOCAL_CFLAGS := -Wall -Wextra# 设置模块标签
LOCAL_MODULE_TAGS := eng debug# 设置 32 位模块的安装路径
LOCAL_MODULE_PATH_32 := $(TARGET_OUT)/lib32/modules# 设置 64 位模块的安装路径
LOCAL_MODULE_PATH_64 := $(TARGET_OUT)/lib64/modules# 设置模块的相对安装路径(可选)
LOCAL_MODULE_RELATIVE_PATH := modulesinclude $(BUILD_SHARED_LIBRARY)# 第二个模块
include $(CLEAR_VARS)LOCAL_MODULE := mymodule2
LOCAL_SRC_FILES := src/mymodule2.c
LOCAL_CFLAGS := -Wall -Wextra# 设置模块标签
LOCAL_MODULE_TAGS := eng debug# 设置 32 位模块的安装路径
LOCAL_MODULE_PATH_32 := $(TARGET_OUT)/lib32/utils# 设置 64 位模块的安装路径
LOCAL_MODULE_PATH_64 := $(TARGET_OUT)/lib64/utils# 设置模块的相对安装路径(可选)
LOCAL_MODULE_RELATIVE_PATH := utilsinclude $(BUILD_SHARED_LIBRARY)
Application.mk
APP_ABI := armeabi-v7a arm64-v8a x86 x86_64

构建命令

ndk-build

结果

  • mymodule1 的 32 位版本将被安装到 /system/lib32/modules
  • mymodule1 的 64 位版本将被安装到 /system/lib64/modules
  • mymodule2 的 32 位版本将被安装到 /system/lib32/utils
  • mymodule2 的 64 位版本将被安装到 /system/lib64/utils

总结

通过合理设置 LOCAL_MODULE_PATH_32LOCAL_MODULE_PATH_64LOCAL_MODULE_RELATIVE_PATH,你可以灵活地控制不同架构模块的安装路径。这有助于避免模块之间的冲突,并确保模块在设备上的正确安装位置。


http://www.ppmy.cn/server/145985.html

相关文章

怎么样才算得上熟悉高并发编程?

提到并发编程很多人就会头疼了;首先就是一些基础概念:并发,并行,同步,异步,临界区,阻塞,非阻塞还有各种锁全都砸你脸上,随之而来的就是要保证程序运行时关键数据在多线程…

Taro React小程序开发框架 总结

目录 一、安装 二、目录结构 三、创建一个自定义页面 四、路由 1、API 2、传参 3、获取路由参数 4、设置TabBar 五、组件 六、API Taro非常好用的小程序框架,React开发者无缝衔接上。 一、安装 官方文档:Taro 文档 注意,项目创建…

亚马逊开发视频人工智能模型,The Information 报道

根据《The Information》周三的报道,电子商务巨头亚马逊(AMZN)已开发出一种新的生成式人工智能(AI),不仅能处理文本,还能处理图片和视频,从而减少对人工智能初创公司Anthropic的依赖…

PostgreSQL在Linux环境下的常用命令总结

标题 登录PgSQL库表基本操作命令新建库表修改库表修改数据库名称:修改表名称修改表字段信息 删除库表pgsql删除正在使用的数据库 须知: 以下所有命令我都在Linux环境中执行验证过,大家放心食用,其中的实际名称换成自己的实际名称即…

js判断空对象

1. 使用 Object.keys() 方法 Object.keys(obj) 方法返回一个包含对象可枚举属性名称的数组。如果返回的数组长度为 0,表示对象为空。 const isEmpty (obj) > Object.keys(obj).length 0;// 示例 const emptyObject {}; const nonEmptyObject { key: value …

三格电子—EtherNet IP转Modbus RTU网关

EtherNet/IP转Modbus RTU网关 SG-EIP-MOD-210 产品用途 SG-EIP-MOD-210网关可以实现将Modbus接口设备连接到 EtherNet/IP网络中。用户不需要了解具体的Modbus和 EtherNet/IP协议即可实现将Modbus设备挂载到 EtherNet/IP接口的PLC上,并和Modbus设备进行数据交互。拓…

QT:多ui界面显示

文章目录 1.多ui界面添加2.跳转函数3.返回函数4.Qt5源码工程5.模态显示 1.多ui界面添加 最终生成这个目录 2.跳转函数 void MainWindow::on_pushButton_clicked() {//this->setWindowModality(Qt::WindowModal);test1 *t1 new test1();t1->setParentData(this);this-…

通信综合—8.通信网络安全

一、信息系统安全概述 1.信息系统的构成和分类 信息系统是将用于收集、处理、存储和传播信息的部件组织在一起而成的相关联的整体,般是由计算机硬件、网络和通信设备、计算机软件、信息资源和信息用户组成。它是以处理信息流为目的的人机一体化系统。信息系统主要…