Несмотря на то, что файловый режим 0777
, Android не позволяет выполнять файлы в общем хранилище путем монтирования с noexec
.
Если вы запустите
/system/bin/mount | grep /storage
Вы найдете что-то вроде этого:
/data/media on /storage/emulated type sdcardfs (rw,nosuid,nodev,noexec,noatime,low_uid=1023,low_gid=1023,gid=9997,multi_user,mask=0007,reserved=100MB)
^~~~~~
Фактическая точка монтирования может отличаться (/storage/sdcard0
), но она наверняка смонтирована с noexec
.
Вы должны переместить исполняемый файл в домашний каталог Termux (или куда-нибудь в точку монтирования ext4), прежде чем пытаться его выполнить. Это то, что делает CppDroid. Он запускает исполняемые файлы только во внутренней памяти, хотя исходный код может храниться где угодно.
Если вы хотите работать в Termux, выполните следующие действия:
$ cp <your-program> ~/a.out
$ chmod 777 ~/a.out
$ ~/a.out
program output
$
Для проблемы с «независимым от позиции исполняемым файлом (PIE)» я предлагаю вам очистить данные для CppDroid. Он использует GCC в качестве компилятора, который требует опции -pie
для создания исполняемого файла PIE. Если вы знаете, какие настройки испорчены, вы также можете попробовать исправить это самостоятельно.
Компилятор Clang, предоставляемый Termux, по умолчанию генерирует исполняемые файлы PIE.
person
iBug
schedule
17.11.2017