admin 管理员组

文章数量: 887019

Android 编译静态链接的可执行文件

在Android 开发与调试过程中往往遇到以下两种场景,导致我们编译的可执行程序无法运行:

  • 不支持动态链接,比如系统初始化进程init和Recovery模式下执行的recovery,它们在执行的时候,往往不会挂载/system分区,不存在ld和ldd.so等动态加载工具和C库,这样的可执行程序往往需要静态链接。
  • 一些辅助测试的工具程序。比如busybox等,如果是动态链接的话,依赖的库的接口如有变化,往往会导致程序无法执行。一般都是静态链接,一次编译后,可以随时执行。

    那么在Android 中如何编译一个静态链接的可执行程序呢?
    其实非常简单,我们仿照源码中的bootable/recovery/Android.mk,简化出如下的编译模板:

LOCAL_PATH := $(call my-dir)
#复位编译参数
include $(CLEAR_VARS)
#指定模块名
LOCAL_MODULE := module_name
#标志该模块需要强制静态链接
LOCAL_FORCE_STATIC_EXECUTABLE := true
#指定额外的编译、链接参数
LOCAL_CFLAGS += 

本文标签: 静态 可执行文件 链接 Android