This semester I got this new subject where we get to work with Discovery STM32 F4, and we are still in the phase of setting it up. But I have this problem in the beginning.
When I try to compile this «blink» code I get this error:
So, as I got it so far, we are using this shortcut command «make» to compile code, and we were given instruction to set it up as it’s shown in images below:
Can anyone see what’s the problem here?
Paolo
19.7k6 gold badges35 silver badges65 bronze badges
asked Apr 1, 2016 at 20:59
4
Error 127
means one of two things:
- file not found: the path you’re using is incorrect. double check that the program is actually in your
$PATH
, or in this case, the relative path is correct — remember that the current working directory for a random terminal might not be the same for the IDE you’re using. it might be better to just use an absolute path instead. - ldso is not found: you’re using a pre-compiled binary and it wants an interpreter that isn’t on your system. maybe you’re using an x86_64 (64-bit) distro, but the prebuilt is for x86 (32-bit). you can determine whether this is the answer by opening a terminal and attempting to execute it directly. or by running
file -L
on/bin/sh
(to get your default/native format) and on the compiler itself (to see what format it is).
if the problem is (2), then you can solve it in a few diff ways:
- get a better binary. talk to the vendor that gave you the toolchain and ask them for one that doesn’t suck.
- see if your distro can install the multilib set of files. most x86_64 64-bit distros allow you to install x86 32-bit libraries in parallel.
- build your own cross-compiler using something like crosstool-ng.
- you could switch between an x86_64 & x86 install, but that seems a bit drastic ;).
answered Apr 2, 2016 at 1:02
Mike FrysingerMike Frysinger
2,7971 gold badge21 silver badges26 bronze badges
2
Terminals are very powerful, regardless of what operating system you’re using. This means that while you can perform just about any OS task with a few commands, you need to know these commands to take advantage of them. Of course, different operating systems use different languages in their terminals as well, meaning you need to decide to have mastery over one or use multiple.
In this article, we’re talking about Make error 127, its causes and what you can do to fix the problem.
What causes Make error 127?
The Make error 127 generally occurs when you’re working with a Go operator-sdk project cloned from Github as the command doesn’t generate the bin directory with the required files to run the Make installation.
As for code 127, it simply indicates a “command not found” error. Since the initial command hasn’t generated the files required, the Make installation fails as the system can’t find the source files to run or read the command.
Also read: How to fix ‘wget command not found’ issue in Bash?
Depending on what’s causing your error, here are two fixes you can try out.
Reinstall a different version of the Operator-SDK
First up, if the problem is being caused by operator-sdk, we can try either rolling back to version 18.0.0 or pushing forward to the latest version available (assuming the latest version has fixed the bug.
All you have to do is uninstall operator-sdk using brew or apt-get or whatever package manager you’re using. Once that’s done, we reinstall a different version (either version 18.0.0 or the latest one) as well as the latest version of Go. Keep in mind that if you’re using version 18.0.0 of operator-sdk, we recommend installing version 1.17.6 of Go.
Finally, check if the bin folder has now been created and if it has, you can go ahead and run your Make installation without any errors.
Check your PATH variables
Since error 127 also indicates that a command or file required to run a command is missing, try checking your PATH variable to see if the command exists there. Alternatively, a simpler way of doing this is opening a terminal in the root directory of whatever command you want to run and then run the problematic command.
Also read: Fix: Error:03000086:digital envelope routines::initialization error
I am trying to teach myself gnuMake after learning the basics of C++
I am running Ubuntu 14.04 equivalent (elementary os)
And I am getting the error (full output of make run):
g++ ./main.o -w -o test
This is a test!
/bin/sh: 1: This: not found
make: *** [exe] Error 127
My Makefile:
CC=g++
SRC=$(shell find -name '*.cpp')
OBJS= $(SRC:.cpp=.o)
EXEC=test
FLAGS= -w
LINKS=
%.o: %.cpp
$(CC) -c $*.cpp -o $*.o
$(EXEC): $(OBJS)
$(CC) $(OBJS) $(FLAGS) $(LINKS) -o $(EXEC)
all: $(EXEC)
exe:
$(shell ./$(EXEC))
run: all exe
clean:
rm -rf *.o $(EXEC)
This is a combination of taking basic make tutorials and reading Makefiles in github
main.cpp:
#include <iostream>
using namespace std;
int main()
{
cout << "This is a test!" << endl;
return 0;
}
Pretty Basic, but will be extending it to help learn to use and extend my Makefile. Now I can see the program compiles and runs, but I get the error after the run.
I searched for Make error 127 and that seems to output that error for many things, but I did not see a definition for the error, or a similar issue to mine.
Вот список наиболее распространенных ошибок, сгенерированных программой make
, а также некоторая информация о том, что они означают и как их исправить.
Иногда ошибки make
не являются фатальными, особенно при наличии префикса -
в строке рецепта или параметра командной строки -k
.К фатальным ошибкам добавляется строка ***
.
Все сообщения об ошибках либо имеют префикс с именем программы (обычно ‘make‘) или, если ошибка обнаружена в make-файле, имя файла и номер строки, содержащей проблему.
Эти ошибки на самом деле не make
ошибок вообще. make
программа, запущенная как часть рецепта, вернула код ошибки, отличный от 0 (‘Error NN‘), что make
интерпретирует как сбой, или он завершился каким-то другим ненормальным образом (с сигналом какого-то типа). См. Ошибки в рецептах .
Если к сообщению не прикреплено ***
, то подпроцесс завершился неудачно, но правило в make-файле было предварено специальным символом -
,поэтому make
проигнорировал ошибку.
Это означает, что программа make
ничего не могла понять о только что прочитанной строке файла makefile. GNU make
ищет различные разделители ( :
, =
, символы префикса рецепта и т. д.), чтобы указать, какую строку он анализирует. Это сообщение означает, что не удалось найти допустимый.
Одна из наиболее частых причин появления этого сообщения заключается в том, что вы (или, возможно, ваш очень полезный редактор, как в случае со многими редакторами MS-Windows) попытались сделать отступ в строках рецептов пробелами вместо символа табуляции. В этом случае make
будет использовать вторую форму ошибки выше. Помните, что каждая строка в рецепте должна начинаться с символа табуляции (если вы не установили .RECIPEPREFIX
; см. Специальные переменные ). Восемь пробелов не в счет. См . Синтаксис правила .
Это означает, что первая вещь в make-файле кажется частью рецепта: он начинается с символа префикса рецепта и не выглядит допустимой директивой make
(например, назначением переменной). Рецепты всегда должны быть связаны с целью.
Вторая форма создается, если в строке стоит точка с запятой в качестве первого непробельного символа; make
интерпретирует это как то, что вы пропустили раздел правила «target: prerequisite». См . Синтаксис правила .
Это означает, что команда make
решила, что необходимо создать цель, но затем не смогла найти в make-файле никаких инструкций о том, как это сделать, ни явных, ни неявных (в том числе в базе данных правил по умолчанию).
Если вы хотите,чтобы этот файл был собран,вам нужно добавить правило в makefile,описывающее,как эта цель может быть собрана.Другими возможными источниками этой проблемы являются опечатки в makefile (если имя файла неверно)или поврежденное дерево исходников (если этот файл не должен быть собран,а является лишь необходимым условием).
Первое означает, что вы не указали цели для сборки в командной строке, и make
не смог найти ни одного make-файла для чтения. Последнее означает, что какой-то make-файл был найден, но он не содержал никакой цели по умолчанию и ничего не было указано в командной строке. GNU make
не имеет ничего общего в этих ситуациях. См. Аргументы для указания Makefile .
Не найден makefile,указанный в командной строке (первая форма)или включенный (вторая форма).
GNU make
позволяет указывать только один рецепт для каждой цели (за исключением правил с двойным двоеточием). Если вы даете рецепт для цели, которая уже была определена как имеющая, выдается это предупреждение, и второй рецепт перезапишет первый. См. Несколько правил для одной цели .
Это означает, что программа make
обнаружила петлю в графе зависимостей: после отслеживания предварительного условия yyy цели xxx и его предварительных условий и т. Д. Один из них снова зависел от xxx .
Это означает, что вы определили обычную (рекурсивную) переменную make
xxx , которая при расширении будет ссылаться на себя ( xxx ). Это не разрешено; либо используйте просто развернутые переменные (‘:=‘ или же ‘::=‘) или используйте оператор добавления (‘+=‘). См. Как использовать переменные .
Это означает,что вы забыли поставить правильную закрывающую скобку или круглую скобку в ссылке на переменную или функцию.
Это означает, что вы не указали необходимое количество аргументов для этой функции. См. документацию функции для описания ее аргументов. См. Функции для преобразования текста .
Эти ошибки генерируются для неправильно сформированных правил статического шаблона (см. Синтаксис правил статического шаблона ). Первое означает, что часть правила с целевым шаблоном пуста; второе означает, что в части целевого шаблона есть несколько символов шаблона ( %
);третий означает, что в части целевого шаблона нет символов шаблона; а четвертое означает, что все три части правила статического шаблона содержат символы шаблона ( %
) — первая часть не должна содержать символы шаблона.
Если вы видите эти ошибки и не пытаетесь создать правило статического шаблона,проверьте значение любых переменных в списках целей и предпосылок,чтобы убедиться,что они не содержат двоеточий.
Это предупреждение и следующее генерируются, если программа make
обнаруживает ошибочные состояния, связанные с параллельной обработкой в системах, в которых make
обмениваться данными подкоманды (см. Параметры связи с подкомпоновкой make
. Это предупреждение генерируется, если рекурсивный вызов процесса make
вынужден иметь ‘-jN‘ в своем списке аргументов (где N больше единицы). Это может произойти, например, если вы установите для переменной среды MAKE
значение ‘make -j2‘. В этом случае sub- make
не взаимодействует с другими процессами make
и просто будет притворяться, что у него есть две собственные задачи.
Чтобы процессы make
могли взаимодействовать, родительский процесс передает информацию дочернему процессу. Поскольку это может привести к проблемам, если дочерний процесс на самом деле не является make
, родительский процесс будет делать это только в том случае, если он думает, что дочерний процесс является make
. Для определения этого родитель использует обычные алгоритмы (см. Как работает переменная MAKE
). Если make-файл сконструирован таким образом, что родитель не знает, что дочерний процесс является make
-процессом, то дочерний процесс получит только часть необходимой информации. В этом случае дочерний элемент сгенерирует это предупреждающее сообщение и последовательно продолжит свою сборку.
Согласно POSIX правило суффикса не может содержать предварительных условий. Если правило, которое может быть суффиксным правилом, имеет предварительные условия, оно интерпретируется как простое явное правило с нечетным целевым именем. Это требование выполняется, когда включен POSIX-совместимый режим ( определена цель .POSIX
). В версиях GNU make
до 4.3 не выводилось никаких предупреждений и создавалось суффиксное правило, однако все предварительные требования игнорировались и не являлись частью суффиксного правила. Начиная с GNU make
4.3 поведение остается таким же, и, кроме того, генерируется это предупреждение. В будущей версии POSIX-совместимое поведение будет единственным поведением: ни одно правило с предварительным условием не может быть суффиксным правилом, и это предупреждение будет удалено.
I am trying to install shc on Ubuntu 18.04
wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz
tar xvfz shc-3.8.9.tgz
cd shc-3.8.9
make
But receive the following error:
cc -Wall shc.c -o shc
make: cc: Command not found
makefile:31: recipe for target 'shc' failed
make: *** [shc] Error 127
The makefile:
# Makefile
#
INSTALL_PATH = /usr/local
# For SCO
CFLAGS = -b elf -O -D_SVID
# For IRIX
CFLAGS = -xansi -fullwarn -O3 -g0
# For Solaris
CFLAGS = -fast -xO4 -s -v -Xa
# For HPUX
CFLAGS = -Wall -O -Ae
# For OSF1
CFLAGS = -w -verbose -fast -std1 -g0
# For GNU C compiler
CFLAGS = -Wall # -O6 -pedantic
#SHELL = /bin/sh
SHCFLAGS = -v -T # Add -T option to allow binary to be traceable
all: shc ask_for_test
shc: shc.c
$(CC) $(CFLAGS) $@.c -o $@
ask_for_test:
@echo '*** �Do you want to probe shc with a test script?'
@echo '*** Please try... make test'
test: make_the_test ask_for_strings
make_the_test: match.x
@echo '*** Running a compiled test script!'
@echo '*** It must show files with substring "sh" in your PATH...'
./match.x sh
match.x: shc match
@echo '*** Compiling script "match"'
CFLAGS="$(CFLAGS)" ./shc $(SHCFLAGS) -f match
ask_for_strings:
@echo '*** �Do you want to see strings in the generated binary?'
@echo '*** Please try... make strings'
strings: make_the_strings ask_for_expiration
make_the_strings: match.x
@echo '*** Running: "strings -n 5 'match.x'"'
@echo '*** It must show no sensible information...'
strings -n 5 match.x
ask_for_expiration:
@echo '*** �Do you want to probe expiration date?'
@echo '*** Please try... make expiration'
expiration: til_yesterday ask_for_install
til_yesterday: shc match
@echo '*** Compiling "match" to expired date'
CFLAGS="$(CFLAGS)" ./shc $(SHCFLAGS) -vv -e `date "+%d/%m/%Y"` -f match
@echo '*** Running a compiled test script!'
@echo '*** It must fail showing "./match.x: has expired!"'
./match.x
ask_for_install:
@echo '*** �Do you want to install shc?'
@echo '*** Please try... make install'
install: shc
@echo '*** Installing shc and shc.1 on '$(INSTALL_PATH)
@echo -n '*** �Do you want to continue? '; read ANS; case "$$ANS" in y|Y|yes|Yes|YES) ;; *) exit 1;; esac;
install -c -s shc $(INSTALL_PATH)/bin/
install -c -m 644 shc.1 $(INSTALL_PATH)/man/man1/
clean:
rm -f *.o *~ *.x.c
cleanall: clean
rm -f shc *.x
I have no idea how to fix this error. Can anyone help?
slava
3,7679 gold badges30 silver badges65 bronze badges
asked Nov 22, 2018 at 17:24
2
cc is an alias for the GNU C compiler (gcc). You can install it as follows:
sudo apt install gcc
If, for some reason, the gcc compiler is already installed, but the symbolic link /usr/bin/cc
is missing, you can also do:
make CC=gcc
answered Nov 22, 2018 at 18:07
1
sudo apt install build-essential
This will install a C compiler (providing the cc
command) as well as other tools that you may need for building software from source.
answered Nov 22, 2018 at 19:39
moomoo
6656 silver badges14 bronze badges