我正在尝试为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.
我该怎么做才能让它发挥作用?
答案 0 :(得分:0)
ndk代表原生开发套件。该术语用于指代用于连接平台无关代码的工具,例如:java,具有本机代码。
在Android上下文中,ndk是指用于将android java代码与本机代码进行交互的工具。
在所有情况下,接口都将由平台无关代码调用某种类型的库组成。
因此,ndk-build与仅具有库标志的Android.mk file一起使用,例如:LOCAL_MODULE,并且仅生成库,因为它们适合于此目的。
对于静态可执行文件,您必须更直接地使用bona fida make文件使用this toolset。