我试图编译“su”超级用户,实用程序的修改版本,所以我在git上去了android5.0源码,并获得了“su.c”文件。
我的实际设备/硬件是运行的LeTV x500手机:
我是关于硬件数据的,因为我已检查过制造商网站&还使用第三方应用程序获取软件/硬件信息。
使用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(这应该是正确的)无法为设备创建写二进制文件?
答案 0 :(得分:1)
gcc -c
将创建一个目标文件,而不是可执行文件。从命令行中删除-c
参数。