为android构建可执行文件

时间:2015-06-04 14:48:28

标签: android android-ndk android.mk

我正在尝试为android构建一个hello world可执行文件。 我的test.c:

#include <stdio.h>
#include <stdlib.h>
int main()
{
     printf("Hello World\n");
     return 0;
}

我的Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) 
# give module name
LOCAL_MODULE    := hello_world  
# list your C files to compile
LOCAL_SRC_FILES := test.c
# this option will build executables instead of building library for android application.
include $(BUILD_EXECUTABLE)

我的Application.mk:

APP_ABI := all

我运行了ndk-build,我在libs的各个目录中分别获得了7个可执行文件 - arm64-v8a armeabi armeabi-v7a mips mips64 x86 x86_64 当我运行文件命令时,我得到了

hello_world: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), stripped

但是当我把它推到adb shell并执行它时,我收到一个错误:

not executable: magic 7F45.

我该怎么做才能让它发挥作用?

1 个答案:

答案 0 :(得分:0)

ndk代表原生开发套件。该术语用于指代用于连接平台无关代码的工具,例如:java,具有本机代码。

在Android上下文中,ndk是指用于将android java代码与本机代码进行交互的工具。

在所有情况下,接口都将由平台无关代码调用某种类型的库组成。

因此,ndk-build与仅具有库标志的Android.mk file一起使用,例如:LOCAL_MODULE,并且仅生成库,因为它们适合于此目的。

对于静态可执行文件,您必须更直接地使用bona fida make文件使用this toolset