Подтвердить что ты не робот

Make: *** [] Ошибка 1 ошибка

Я пытаюсь скомпилировать файл Pro * C на gcc, и я получаю эту ошибку:

make: *** [MedLib_x.o] Error 1

Это команда, напечатанная make:

   /usr/bin/gcc -g -fPIC -m64 -DSS_64BIT_SERVER  -I/home/med/src/common -
I/u01/app/oradb11r2/product/11.2.0/dbhome_3/rdbms/demo 
-I/u01/app/oradb11r2/product/11.2.0/dbhome_3/rdbms/public 
-I/u01/app/oradb11r2/product/11.2.0/dbhome_3/precomp/public 
-I/u01/app/oradb11r2/product/11.2.0/dbhome_3/xdk/include INCLUDE=/u01/app/oradb11r2/product/11.2.0/dbhome_3/precomp/public -lnapi -ltabs -c MedLib_x.c

Пожалуйста, помогите мне, почему это делает ошибку? Хотя также создается объектный файл.

4b9b3361

Ответ 1

Из приложения GNU Make Error, как вы видите, это не ошибка Make, а ошибка, исходящая от gcc.

'[foo] Ошибка NN '[Foo] описание сигнала Эти ошибки на самом деле не делают ошибок. Они означают, что программа, которая вызывается как часть рецепта, возвращает код ошибки не-0 ( "Ошибка NN" ), который интерпретирует как отказ, или он выходил каким-то другим ненормальным способом (с сигналом некоторого типа). См. "Ошибки в рецептах". Если к сообщению не добавлено ***, то подпроцесс завершился неудачно, но правило в make файле было префикс-специального символа, поэтому make игнорирует ошибку.

Итак, чтобы атаковать проблему, требуется сообщение об ошибке из gcc. Вставьте команду в Makefile непосредственно в командную строку и посмотрите, что говорит gcc. Подробнее об ошибках Сделать ошибки нажмите здесь.

Ответ 2

Я получил то же самое. Запуск "make" и сбой только с этим сообщением.

% make
make: *** [all] Error 1

Это вызвано командой в правиле, завершающейся с ненулевым статусом выхода. Например. представьте себе следующее (глупое) Makefile:

all:
       @false
       echo "hello"

Это приведет к ошибке (без печати "привет" ) с указанным выше сообщением, так как false завершается с состоянием выхода 1.

В моем случае я пытался быть умным и делать резервную копию файла перед его обработкой (чтобы я мог сравнить вновь созданный файл с моим предыдущим). Я сделал это, имея в своем Make правило, которое выглядит так:

@[ -e [email protected] ] && mv [email protected] [email protected]

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

@if [ -e [email protected] ]; then mv [email protected] [email protected]; fi

Решила мою проблему.

Ответ 3

Иногда вы получаете много выходных данных компилятора с множеством предупреждений и без строки вывода, который говорит   "ошибка: вы сделали что-то не так" но все еще была ошибка. Примером этого является отсутствующий заголовочный файл - компилятор говорит что-то вроде "нет такого файла", но не "ошибка: нет такого файла", после чего он выйдет с ненулевым кодом выхода через некоторое время (возможно, после многих других предупреждений). В этих случаях Make будет бомбить с сообщением об ошибке!

Ответ 4

В моем случае была статическая переменная, которая не была инициализирована. Когда я его инициализировал, ошибка была удалена. Я не знаю логики, но работал у меня. Я знаю его немного поздно, но другие люди с подобной проблемой могут получить некоторую помощь.