Android NDK,独立构建,错误不可执行:magic 7F45和/或不可执行:magic 4c01

时间:2016-03-03 20:55:25

标签: android c android-ndk

我试图编译“su”超级用户,实用程序的修改版本,所以我在git上去了android5.0源码,并获得了“su.c”文件。

我的实际设备/硬件是运行的LeTV x500手机:

  • Android 5.0.2, SDK 21
  • CPU架构 AArch64 处理器rev 2
  • 指令集 arm64-v8a

我是关于硬件数据的,因为我已检查过制造商网站&还使用第三方应用程序获取软件/硬件信息。

使用cygwin shell:

$ sh make-standalone-toolchain.sh --platform = android-21 --install-dir = / cygdrive / c / users / anaim / ndk-standalone_arm64 --arch = arm64 --toolchain = aarch64-linux-andr oid-4.9 --ndk-dir = / cygdrive / c / Users / anaim / android-ndk-r10e --system = windows-x86 _64

结果:

复制预建的二进制文件...... 复制sysroot头文件和库... 复制c ++运行时标头和库... 将文件复制到:/ cygdrive / c / users / anaim / ndk-standalone_arm64 打扫干净... 完成。命令:

然后我编译了修改后的su.c:

$ / cygdrive / c / Users / anaim / ndk-standalone_arm64 / bin / aarch64-linux-android-gcc -c  su.c -o su -I / cygdrive / c / Users / anaim / android-ndk-r10e / platforms / android-21 / arc H-臂/用户/包括

然后我将su二进制文件推送到设备路径/ local / data / tmp&针对su发布了chmod 777,但是当我想执行时遇到了这个错误:

$ / data / local / tmp / su / system / bin / sh: / data / local / tmp / su:不可执行:magic 7F45

我尝试使用另一个带有 - arch flag的工具链来设置--arch = arm ,但这给了我一个稍微不同的错误 / data / local / tmp / su:not executable:魔术4c01

为什么两个独立的工具链都是arm& arm64(这应该是正确的)无法为设备创建写二进制文件?

1 个答案:

答案 0 :(得分:1)

gcc -c将创建一个目标文件,而不是可执行文件。从命令行中删除-c参数。