0

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

测试.c:

int main(){
  return 0;
}

安卓.mk:

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

include(BUILD_EXECUTABLE)

--

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

4

3 回答 3

0

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

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

于 2013-05-23T19:16:17.423 回答
0

这是我从谷歌得到的答案:

这个是正常的。默认情况下,针对 API 级别 17 或更高级别时,“位置独立可执行文件”(又名 PIE)由 BUILD_EXECUTABLE 规则生成。

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

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

  • 针对较低的 API 级别。
  • 在 Application.mk 中使用 'APP_PIE := false'
于 2013-05-27T10:09:16.260 回答
0

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

于 2013-04-16T15:12:43.980 回答