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
Пожалуйста, помогите мне, почему это делает ошибку? Хотя также создается объектный файл.
Ответы
Ответ 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
В моем случае была статическая переменная, которая не была инициализирована. Когда я его инициализировал, ошибка была удалена. Я не знаю логики, но работал у меня. Я знаю его немного поздно, но другие люди с подобной проблемой могут получить некоторую помощь.