Intereting Posts
Загрузка определенных maptiles в кеш в OSMDroid Как удалить коэффициент силы тяжести с показаний акселерометра на 3-осевом акселерометре Android Поддержка Android v23.1.0 прерывает обновление NavigationView get / find header Как я могу использовать MS Visual Studio для разработки Android? В чем разница между contentprovider и contentResolver в android Предотвращение отклонения диалога при повороте экрана в Android Firebase Cloud Messaging (FCM) – запуск активности, когда пользователь нажимает уведомление с дополнительными функциями Как создать ListView с закругленными углами в Android? AlertDialog styling – как изменить стиль (цвет) названия, сообщения и т. Д. Как изменить размер панели действий Может ли запланированное будущее вызвать утечку памяти? Андроид задает собственный шрифт для рисования Виджет управления питанием, отображаемый на короткое время при обновлении моего собственного виджета через AppWidgetManager, в чем проблема? Ошибка IntentService для Android IntellService Получить реальный путь для Uri Android

Как запустить скомпилированный двоичный файл в 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 доступным для динамической компоновки с вашим двоичный).

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