Ошибка make 127 игнорирование

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:

Error 127

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:

Setup]

Can anyone see what’s the problem here?

Paolo's user avatar

Paolo

19.7k6 gold badges35 silver badges65 bronze badges

asked Apr 1, 2016 at 20:59

Emir's user avatar

4

Error 127 means one of two things:

  1. 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.
  2. 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:

  1. get a better binary. talk to the vendor that gave you the toolchain and ask them for one that doesn’t suck.
  2. 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.
  3. build your own cross-compiler using something like crosstool-ng.
  4. you could switch between an x86_64 & x86 install, but that seems a bit drastic ;).

answered Apr 2, 2016 at 1:02

Mike Frysinger's user avatar

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. 

How Facebook's AI is trying to assist suicide prevention

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-файле, имя файла и номер строки, содержащей проблему.

[ foo ] Ошибка NN
[foo] signal description

Эти ошибки на самом деле не make ошибок вообще. make программа, запущенная как часть рецепта, вернула код ошибки, отличный от 0 (‘Error NN‘), что make интерпретирует как сбой, или он завершился каким-то другим ненормальным образом (с сигналом какого-то типа). См. Ошибки в рецептах .

Если к сообщению не прикреплено *** , то подпроцесс завершился неудачно, но правило в make-файле было предварено специальным символом - ,поэтому make проигнорировал ошибку.

отсутствующий разделитель.Остановитесь.
отсутствует разделитель (вы имели в виду TAB вместо 8 пробелов?).Стоп.

Это означает, что программа make ничего не могла понять о только что прочитанной строке файла makefile. GNU make ищет различные разделители ( : , = , символы префикса рецепта и т. д.), чтобы указать, какую строку он анализирует. Это сообщение означает, что не удалось найти допустимый.

Одна из наиболее частых причин появления этого сообщения заключается в том, что вы (или, возможно, ваш очень полезный редактор, как в случае со многими редакторами MS-Windows) попытались сделать отступ в строках рецептов пробелами вместо символа табуляции. В этом случае make будет использовать вторую форму ошибки выше. Помните, что каждая строка в рецепте должна начинаться с символа табуляции (если вы не установили .RECIPEPREFIX ; см. Специальные переменные ). Восемь пробелов не в счет. См . Синтаксис правила .

рецепт начинается до первой цели.Стоп.
недостающее правило перед рецептом.Остановитесь.

Это означает, что первая вещь в make-файле кажется частью рецепта: он начинается с символа префикса рецепта и не выглядит допустимой директивой make (например, назначением переменной). Рецепты всегда должны быть связаны с целью.

Вторая форма создается, если в строке стоит точка с запятой в качестве первого непробельного символа; make интерпретирует это как то, что вы пропустили раздел правила «target: prerequisite». См . Синтаксис правила .

Нет правила делать цель ` xxx ‘.
Нет правила для создания цели ` xxx ‘, необходимого yyy ‘.

Это означает, что команда make решила, что необходимо создать цель, но затем не смогла найти в make-файле никаких инструкций о том, как это сделать, ни явных, ни неявных (в том числе в базе данных правил по умолчанию).

Если вы хотите,чтобы этот файл был собран,вам нужно добавить правило в makefile,описывающее,как эта цель может быть собрана.Другими возможными источниками этой проблемы являются опечатки в makefile (если имя файла неверно)или поврежденное дерево исходников (если этот файл не должен быть собран,а является лишь необходимым условием).

Не указаны цели и не найден makefile.Остановить.
Нет целей.Остановка.

Первое означает, что вы не указали цели для сборки в командной строке, и make не смог найти ни одного make-файла для чтения. Последнее означает, что какой-то make-файл был найден, но он не содержал никакой цели по умолчанию и ничего не было указано в командной строке. GNU make не имеет ничего общего в этих ситуациях. См. Аргументы для указания Makefile .

Makefile ` xxx ‘не найден.
Включенный make-файл ` xxx ‘не найден.

Не найден makefile,указанный в командной строке (первая форма)или включенный (вторая форма).

предупреждение: переопределение рецепта для цели ` xxx
предупреждение: игнорирование старого рецепта для цели ` xxx

GNU make позволяет указывать только один рецепт для каждой цели (за исключением правил с двойным двоеточием). Если вы даете рецепт для цели, которая уже была определена как имеющая, выдается это предупреждение, и второй рецепт перезапишет первый. См. Несколько правил для одной цели .

Круговая зависимость xxx <- yyy удалена.

Это означает, что программа make обнаружила петлю в графе зависимостей: после отслеживания предварительного условия yyy цели xxx и его предварительных условий и т. Д. Один из них снова зависел от xxx .

Рекурсивная переменная ` xxx ‘ссылается на себя (в конце концов). Останавливаться.

Это означает, что вы определили обычную (рекурсивную) переменную make xxx , которая при расширении будет ссылаться на себя ( xxx ). Это не разрешено; либо используйте просто развернутые переменные (‘:=‘ или же ‘::=‘) или используйте оператор добавления (‘+=‘). См. Как использовать переменные .

Непрерванная переменная ссылка.Стоп.

Это означает,что вы забыли поставить правильную закрывающую скобку или круглую скобку в ссылке на переменную или функцию.

недостаточно аргументов для функции ` xxx ‘. Останавливаться.

Это означает, что вы не указали необходимое количество аргументов для этой функции. См. документацию функции для описания ее аргументов. См. Функции для преобразования текста .

отсутствующий целевой паттерн.Остановитесь.
несколько моделей целей.Стоп.
целевой шаблон не содержит `%’.Остановитесь.
смешанные неявные и статические правила паттерна.Стоп.

Эти ошибки генерируются для неправильно сформированных правил статического шаблона (см. Синтаксис правил статического шаблона ). Первое означает, что часть правила с целевым шаблоном пуста; второе означает, что в части целевого шаблона есть несколько символов шаблона ( % );третий означает, что в части целевого шаблона нет символов шаблона; а четвертое означает, что все три части правила статического шаблона содержат символы шаблона ( % ) — первая часть не должна содержать символы шаблона.

Если вы видите эти ошибки и не пытаетесь создать правило статического шаблона,проверьте значение любых переменных в списках целей и предпосылок,чтобы убедиться,что они не содержат двоеточий.

предупреждение:принудительное -jN в submake:отключение режима сервера заданий.

Это предупреждение и следующее генерируются, если программа make обнаруживает ошибочные состояния, связанные с параллельной обработкой в ​​системах, в которых make обмениваться данными подкоманды (см. Параметры связи с подкомпоновкой make . Это предупреждение генерируется, если рекурсивный вызов процесса make вынужден иметь ‘-jN‘ в своем списке аргументов (где N больше единицы). Это может произойти, например, если вы установите для переменной среды MAKE значение ‘make -j2‘. В этом случае sub- make не взаимодействует с другими процессами make и просто будет притворяться, что у него есть две собственные задачи.

warning:jobserver unavailable:using -j1.Добавьте `+’ к родительскому правилу 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's user avatar

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

Peter Selinger's user avatar

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

moo's user avatar

moomoo

6656 silver badges14 bronze badges

  • Ошибка maint reqd soon
  • Ошибка maint reqd lexus
  • Ошибка maint reqd honda civic
  • Ошибка mains ccw rot
  • Ошибка main должна возвращать значение