Подтвердить что ты не робот

Запустить собственный исполняемый файл 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 больше не позволяет выполнять исполняемые файлы. Может ли кто-нибудь подтвердить это и дать мне решение?

4b9b3361

Ответ 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, и это объясняет ошибку "Не найден".