web-dev-qa-db-ja.com

make:*** []エラー1エラー

GccでPro * Cファイルをコンパイルしようとすると、このエラーが発生します。

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

このmakeエラーが発生する理由を教えてください。オブジェクトファイルも作成されますが。

33
QMG

From GNU Makeエラーの付録。これはMakeエラーではなく、gccからのエラーです。

「[foo]エラーNN」「[foo]シグナルの説明」これらのエラーは、実際にはまったくエラーではありません。それらは、レシピの一部として呼び出されたプログラムが0以外のエラーコード(「エラーNN」)を返し、それが失敗として解釈されるか、何らかの異常な方法で(何らかのタイプの信号で)終了したことを意味します。レシピのエラーを参照してください。メッセージに***が添付されていない場合、サブプロセスは失敗しましたが、メイクファイルのルールの前に特殊文字-が付いているため、makeはエラーを無視しました。

そのため、問題を攻撃するには、gccからのエラーメッセージが必要です。 Makefileのコマンドをコマンドラインに直接貼り付けて、gccの内容を確認します。 エラーの作成の詳細については、ここをクリックしてください。

21
fnokke

私は同じことを得た。 「make」を実行すると、このメッセージだけで失敗します。

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

これは、ルール内のコマンドがゼロ以外の終了ステータスで終了することが原因でした。例えば。次の(愚かな)Makefileを想像してください:

all:
       @false
       echo "hello"

falseは終了ステータス1で終了するため、上記のメッセージでこれは失敗します(「hello」を出力せずに)。

私の場合、私は賢くてファイルを処理する前にバックアップを作成しようとしていました(そのため、新しく生成されたファイルを以前のファイルと比較できました)。これを行うには、次のようなMakeルールを使用します。

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

...ターゲットファイルが存在しない場合、上記の構成は終了ステータス1で(mvコマンドを実行せずに)終了するため、そのルール内の後続のコマンドは実行に失敗します。障害のある行を次のように書き換えます。

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

私の問題を解決しました。

16
zrajm

時々、多くの警告が表示され、「エラー:ここで何か間違ったことをしました」という出力が何行も表示されないコンパイラ出力が大量に得られることがありますが、それでもエラーが発生します。この例は、ヘッダーファイルの欠落です-コンパイラーは「no such file」のようなメッセージを表示しますが、「error:no such file」ではなく、しばらくしてからゼロ以外の終了コードで終了します。これらの場合、makeはエラーメッセージを表示します。

3
John Lupien

私の場合、初期化されていない静的変数がありました。私がそれを初期化したとき、エラーは取り除かれました。私はその背後にある論理を知らないが、私のために働いた。私は少し遅れていることを知っていますが、同様の問題を抱えている他の人々が助けを得るかもしれません。

0
Waqas Ahmed