Запустить собственный исполняемый файл ARM на желе Bean
Я ищу методы для запуска исполняемого исполняемого файла ARM на Android 4.1 (Jelly Bean). Например, компиляция классической программы C
// hello.c
#include <stdio.h>
int main() {
printf("Hello world");
}
в исполняемый файл ARMv7a, скажем hello
, используя Android NDK, а затем запустите его в оболочке Android. Я попробовал метод, предложенный в Интернете, например, нажав исполняемый файл на /data/local
на
adb push hello /data/local
изменить разрешение, чтобы разрешить его выполнение с помощью
adb shell chmod 755 /data/local/hello
а затем вызовите их в оболочке с помощью
adb shell /data/local/hello
Последний шаг завершается с ошибкой:
/data/local/hello: not found
но, очевидно, файл есть. Я подозреваю, что проблема заключается в том, что оболочка Jelly Bean больше не позволяет выполнять исполняемые файлы. Может ли кто-нибудь подтвердить это и дать мне решение?
Ответы
Ответ 1
Если вы хотите запустить собственный бит ARM в Android, вам нужно скомпилировать с -статический.
libc, который вы используете для сборки (если используется стандартная инструментальная привязка ARM, а не Android NDK) отличается от Android libc (bionic), и поэтому, когда ваш двоичный файл намерен динамически связываться с libc на цель, это будет не потому, что libc doesn ' t на цель.
С параметром -статический вы связываете то, что вам нужно от libc во время сборки, и вам не нужно беспокоиться о динамическом связывании вещей.
Ответ 2
Убедитесь, что adb push не сбрасывает ошибку "Разрешить отказ". Существование контрольного файла путем запуска: adb shell ls/data/local
Поскольку я обновился до 4.0.4, я не могу получить доступ к /data/local, но to/data/local/tmp, и это объясняет ошибку "Не найден".