Как запустить скомпилированный двоичный файл в Android?

Я пытаюсь запустить скомпилированный двоичный файл в моем телефоне Android, но он просто продолжает говорить мне «Нет такого файла или каталога».

Чтобы быть конкретным, я скомпилировал wicurse , и, как описано в команде arm, очевидно, что исходный код может быть скомпилирован для архитектуры arm без внесения каких-либо изменений в make-файл. И поэтому я сделал следующее:

export CROSS_COMPILE=arm-linux-gnueabi- make CROSS_COMPILE=arm-linux-gnueabi- 

И затем с полученным двоичным (wicurse) я сделал следующее:

 adb push wificurse /data 

В корневой оболочке adb я сделал:

  root@android:/data # chmod 0777 wificurse 

Не возвращает ничего; работает.

  root@android:/data # chmod u+x wificurse 

Возвращает «Плохой режим».

  root@android:/data # busybox chmod 077 wificurse 

Не возвращает ничего; работает.

  root@android:/data # busybox chmod u+x wificurse 

Не возвращает ничего; работает.

Но когда я пытаюсь запустить двоичный код с помощью

  root@android:/data # ./wificurse 

Он возвращает «/ system / bin / sh: ./wificurse: Нет такого файла или каталога». Был ли ls в папке и в бинарнике.

Уже попытался скопировать двоичный файл на внутреннюю SD-карту, затем переместился в / data (даже попытался / system / bin и / system / xbin), и он возвращает «Access denied», но если я chmod в двоичном формате, он вернет ту же ошибку (No Такой файл или каталог). Может, кто-нибудь мне поможет, пожалуйста? Я использовал оболочку linux в течение 2+ лет, хотя я полностью готов к программированию. Я предполагаю, что мне не хватает чего-то вроде инструментальной цепочки, я не знаю.
Я запускаю Ubuntu 15.10 x64.

Solutions Collecting From Web of "Как запустить скомпилированный двоичный файл в Android?"

Вы пробовали методы в этой теме? «Нет такого файла или каталога», пытающегося выполнить linux-бинарник на Android-устройстве

Альтернативным способом решения этой проблемы будет установка KBOX на Android. Автор разработал такие инструменты, как gcc, ssh-сервер для платформы Android. Поэтому вы можете запустить ssh-сервер на своем телефоне и выполнить всю свою работу на своем ПК, а это значит, что вы можете скомпилировать свой код прямо на телефоне 🙂

Очевидно, что ваш двоичный файл зависит от некоторой общей библиотеки (.so), которая не отображается для динамической компоновки. Вы можете использовать readelf из своей инструментальной цепочки, и вы получите что-то вроде этого:

 tom@pc:~/workspace/test/arm-v7a_android9/release$ ~/toolchains/armeabiv7a_android-9_ndk-r10e_gcc-4.9/bin/arm-linux-androideabi-readelf -d test Dynamic section at offset 0x445a14 contains 27 entries: Tag Type Name/Value 0x00000003 (PLTGOT) 0x44fc50 0x00000002 (PLTRELSZ) 1864 (bytes) 0x00000017 (JMPREL) 0x74d24 0x00000014 (PLTREL) REL 0x00000011 (REL) 0x74cd4 0x00000012 (RELSZ) 80 (bytes) 0x00000013 (RELENT) 8 (bytes) 0x00000015 (DEBUG) 0x0 0x00000006 (SYMTAB) 0x8148 0x0000000b (SYMENT) 16 (bytes) 0x00000005 (STRTAB) 0x26718 0x0000000a (STRSZ) 273460 (bytes) 0x00000004 (HASH) 0x6934c 0x00000001 (NEEDED) Shared library: [liblog.so] 0x00000001 (NEEDED) Shared library: [libm.so] 0x00000001 (NEEDED) Shared library: [libc.so] 0x00000001 (NEEDED) Shared library: [libdl.so] 0x0000001a (FINI_ARRAY) 0x447cb8 0x0000001c (FINI_ARRAYSZ) 12 (bytes) 0x00000019 (INIT_ARRAY) 0x447cc4 0x0000001b (INIT_ARRAYSZ) 324 (bytes) 0x00000020 (PREINIT_ARRAY) 0x447e08 0x00000021 (PREINIT_ARRAYSZ) 0x8 0x0000001e (FLAGS) BIND_NOW 0x6ffffffb (FLAGS_1) Flags: NOW 0x00000000 (NULL) 0x0 

Убедитесь, что все библиотеки типа (NEEDED) находятся на вашем устройстве Android и видны для вашего двоичного файла (вы должны использовать export LD_LIBRARY_PATH=<path>[:<another_path>[..]] чтобы сделать .so доступным для динамической компоновки с вашим двоичный).

Если проблема еще не решена, ваше приложение связано с другой версией какой-либо системной библиотеки – попробуйте использовать более старую инструментальную цепочку.