$(build_executable)生成共享对象

时间:2013-04-05 06:51:34

标签: android-ndk

我正在尝试为Android创建一个本机可执行文件,它一直在崩溃。使用readelf和objdump测试文件使文件被认为是共享对象文件。 我正在使用r8e并使用ndk-build

进行编译

test.c的:

int main(){
  return 0;
}

Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC FILES := test.c
LOCAL_MODULE := test

include(BUILD_EXECUTABLE)

-

将app_platform设置为android-9会导致创建可执行文件(并且不会崩溃)。

3 个答案:

答案 0 :(得分:0)

您是否尝试为main()方法指定参数int argschar *argv[]?另外,你想在哪里运行它?

答案 1 :(得分:0)

我确认了这个错误...我有一个与ndk-r8完美编译的项目,但当我切换到ndk-8e时,我的可执行文件不再正常构建。

我在此报告:https://code.google.com/p/android/issues/detail?id=55769

答案 2 :(得分:0)

以下是我从谷歌获得的答案:

这很正常。 默认情况下,当目标API级别为17或更高时,“Position Independent Executables”(a.k.a. PIE)由BUILD_EXECUTABLE规则生成。

这些是可执行二进制文件,但它们仅在Android 4.1或更高版本上受支持。有关详细信息,请参见[1]。

如果你真的不想要这些(例如因为你希望你的程序在平台的早期版本上运行),你有两个选择:

  • 定位较低的API级别。
  • 在Application.mk
  • 中使用'APP_PIE:= false'