Как определить проблему?
file cross_compiled_executable
Содержит что-то вроде:
interpreter /lib/ld-uClibc.so.0
и проблема в том, что этот файл не существует на целевом устройстве.
Как решить проблему?
Используйте правильный компилятор,либо:
используйте собственный компилятор на цели. Но обычно цели намного медленнее, чем ваш хост, и ограничены в пространстве, поэтому вы, вероятно, не захотите этого делать.
Вы также можете использовать функциональный эмулятор, такой как QEMU, для сборки, а затем запускать программы только на более медленной платформе, например. gem5 или медленная доска.
Просто взломать interpreter
потенциально недостаточно, в частности, вы должны обеспечить бинарную совместимость между программой и целевой libc или интерфейсами программы и ядра (, системными вызовами, /proc
и т. д. ), если вы пытаетесь использовать-static
(целевое ядро может быть слишком старым и не содержать необходимых интерфейсов ). Единственное надежное решение — использовать правильную цепочку инструментов.
Стандартная утилита read
принимает как минимум одно имя переменной.
Некоторые реализации оболочки read
используют переменную по умолчанию , например REPLY
, для хранения прочитанных данных, если имя не указано, но dash
, стремясь быть оболочкой, совместимой с POSIX, не не (, так как это не требуется по стандарту ). Эквивалентом в оболочке dash
будет
read REPLY
Оболочка bash
, даже в режиме POSIX, поддерживает некоторые не -функции POSIX. Это один из них, что означает, что read
без имени переменной будет работать, даже если вы запустите оболочку bash --posix
.
Полный список того, что происходит, когда вы включаете режим POSIX в bash
(, к которому этот вопрос на самом деле не относится ), см. вhttps://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html