Но позже я узнал, что если я введу эту команду вручную, она будет работать. Но это не сработает, если я скопирую и вставлю команду в терминал. Даже если я вставил его, мне нужно повторно ввести objcopy, чтобы заставить его работать.
Если копирование и вставка команды в окно терминала не работает, но ввод вручную (повторный) команда в том же окне терминала работает, затем следует, что вы на самом деле не вводите одну и ту же команду.
Также это происходит на g cc и ld, но оба они в конечном итоге сработали когда я снова набрал команду в makefile, но не в objcopy.
Это в значительной степени пригвоздило ее для меня. Вероятно, ваш make-файл содержит непечатаемые символы, которые Ubuntu не распознает как пробелы. По крайней мере, один такой символ находится непосредственно рядом с каждым именем команды, возможно, непосредственно перед ним, имя команды интерпретируется как включающее этот символ. Более того, вы можете вырезать и вставить это вместе с командой, но, конечно, это не так, если вы просто наберете то, что кажется командой в make-файле.
Иногда возникает похожая проблема, связанная с Windows терминаторы строки вместо Unix терминаторы строки, но здесь это не так. Я предполагаю, что это могло произойти из-за копирования содержимого make-файла с веб-страницы.
Вы можете отфильтровать все такие символы из вашего make-файла, обработав его командой tr
:
tr -cd '\t\n\040-\176' < Makefile > Makefile.new
Содержит символы табуляции, перевода строки и символы ASCII от 040 до 176 восьмеричного числа (== 32 - 126 десятичных == 20 - 7e шестнадцатеричных). Вы сможете узнать, изменилось ли что-нибудь, сравнив размеры исходного и нового файлов. Предположим, что новый файл меньше и выглядит нормально, впереди go и замените оригинальный.