«не исполняемый файл: magic 7F45» при запуске Redsocks на эмуляторе Android

Я пытаюсь запустить ProxyDroid или redsocks на эмуляторе Android Genymotion (x86). Оболочку ADB в устройство, запускаю redsocks и получаю not executable: magic 7F45.

Я знаю, это означает, что версия не соответствует процессору. Однако на Genymotion я могу без проблем запускать кучу пакетов ARM (установив файлы перевода Genymotion ARM).

Я скомпилировал исходники redsocks на моем компьютере с Ubuntu (двоичный файл отлично работает на моем Ubuntu x86), но когда я скопировал двоичный файл в эмулятор, он по-прежнему выдает то же сообщение об ошибке, когда я пытаюсь его запустить ( ) not executable: magic 7F45. Итак, похоже, что ни ARM, ни x86 версии не работают на эмуляторе.

Я также взял двоичный файл redsocks, который я скомпилировал на своей машине Ubuntu x86, и отправил его в x86 AVD (стандартный SDK) — он работал отлично. Получается, что not executable: magic 7F45ошибка не связана с кросс-процессорной компиляцией?

Есть ли способ запустить Redsocks на Genymotion?

Ответы (2)

Какая file(1)утилита говорит о вашем скомпилированном бинарнике?

Поскольку компиляция на ПК с архитектурой x86 не обещает, что ваш бинарный файл всегда будет иметь целевую платформу x86 - GCC может создавать практически любые цели.

Вы не можете свободно копировать двоичные файлы из вашего Ubuntu в эмулятор — даже если все они основаны на x86, они используют разные базовые библиотеки ОС.

Чтобы скомпилировать бинарник для цели Android-x86, вы должны использовать специальные инструменты кросс-компиляции\окружение. См. цепочку инструментов исходного кода Android, чтобы узнать, как они настраивают переключатели gcc+ld для создания двоичных файлов android-x86 в Ubuntu.