メークによくあるエラー情報(まとめ中)
回転:http://hi.baidu.com/wangy0919/blog/item/d01ae31bbd17361b8618bf36.html
make実行中に発生したエラーはすべて致命的ではない.特にコマンドラインの前に「-」がありますか?それともmakeが「-k」オプションで実行されます.make実行プロセスの致命的なエラーには、プレフィックス文字列「**」があります.エラー情報にはプレフィックスがあります.1つはエラープレフィックスとしてプログラム名を実行することです.もう一つは、makefile自体が文法エラーがあって、makeによって解析され実行できない場合、プレフィクスにはmakefileファイル名とエラーが発生した行番号が含まれている.
以下のエラーリストでは、通常のプレフィックスは省略されています.
[FOO]Error NN
[FOO]signal description
このような間違いはメークの本当の間違いではない.これは、makeがmakeを検出して実行コマンドとして呼び出されたプログラムがゼロではない状態に戻るか、またはこのコマンドプログラムが正常ではない方法で終了(何らかの信号を携帯)し、5.4コマンドのエラーを参照してください.
エラー情報に「*」の文字列が付加されていない場合は、サブプロシージャの呼び出しに失敗します.Makefileにこのコマンドがプレフィックス「-」があると、makeはこのエラーを無視します.
missing separator.Stop.
missing separator.Stop.
認識できないコマンドラインです.MakeはMakefileの読み取り中に含まれている内容を解析できません.GNU_makeは、Makefileを読み出す際に、Makefileの各行の内容を各種の区切り記号(:=,[TAB]文字など)によって識別する.これらのエラーは、makeが合法的なセパレータを発見できないことを意味する.
これらのエラーメッセージが発生する可能性のある理由は、(おそらくエディタでは、ほとんどms-windowsのエディタです)Makefileのコマンドの前に4つの(または8つの)スペースを使って[Tab]文字を代替しました.この場合、上記第二の形態でエラー情報が発生します.また、コマンド行はすべて「Tab」で始まるはずです.
command commence before first target.Stop.
missing rule before commands.Stp.
Makefileはコマンドラインで開始することができます.「Tab」の文字で開始しますが、合法的なコマンドライン(例えば変数の割り当て)ではありません.命令行は規則と一対一に対応しなければならない.
第二のエラーが発生した原因は、行の最初の非空文字がセミコロンである可能性があります.makeはここで規則の「target:prerequisite」部分が抜けていると考えられます.
No rule to make target`XXX'
No rule to make target`XXX',need by`yy'
再構築目標「XXX」のために適切な規則を見つけられませんでした.明確なルールと暗黙のルールが含まれています.
このエラーを修正する方法は、Makefileに再建対象のルールを追加することです.その他、これらのエラーの原因となる可能性があります.Makefileのファイル名のスペルミスまたはソースツリーを破壊しました.
No tagets specified and no makefile found.Stop.
No tagets.Stop.
最初のエラーは、コマンドラインに再構築対象が指定されておらず、makeはmakefileファイルを読み込めないことを示しています.第二のエラーは、makefileファイルを見つけることができますが、最終的な目標がない、または命令行で再構築が必要な目標を指摘していません.この場合、メークは何もしません.第9章を参照してmakeを実行します.
Makefile`XXX'was not found.
Includ makefile`XXX'was not found.
「-f」を使ってmakefileファイルを指定していません.makeは現在のディレクトリの下でデフォルトのMakefileを見つけることができません.「-f」でファイルを指定しますが、この指定されたmakefileファイルは読み込めません.
warning:overriding command for target`XXX'
warning:ignoring old command for target`XXX'
同じ目標の「XXX」に対して一つ以上の再構築命令が存在します.GNU makeでは、同じファイルを複数のルールの対象とする場合は、その再構築命令を規定する規則が一つしかないと規定しています.一つの目標のために何度も同じまたは異なる命令を指定したら、最初の警告が発生します.二つ目のアラーム情報は、新しく指定されたコマンドが前回のコマンドをカバーしたと言います.
Circuular XXX<-YY dependency dropped.
ルールの依存関係は循環を生みました.目標の「XXX」の依存ファイルは「YYY」で、「YYY」に依存する依存リストには「XXX」が含まれています.
Recursive variable`XXX'references itself.Stop.
makeの変数「XXX」(再帰的展開式)は、代替展開時に自身を参照します.直接展開型変数(通過:=定義)に対しても、定義(+=)を追加することは許されません.
Uneterminated variable reference.Stop.
変数または関数参照文法が正しくなく、完全な括弧(左括弧または右括弧が欠けています)が使用されていません.
insufficient argments to function`XXX'.Stop.
関数「XXX」参照時のパラメータ数が不正です.関数にパラメータがありません.
missing target pattern.Stop.
multile target patterns.Stop.
targt pattern contains no'.Stop. <<<====コンパイルしますSIM時に発生したエラー!
mixed implicit and static pattern rules. Stop.
不適切な静的モード規則.
第一条エラーの原因は、静的モード規則の目標セグメントにモードターゲットがないことです.
第二条エラーの原因は、静的モード規則の対象セグメントに複数のモードターゲットが存在することである.
第三条エラーの原因は、静的モード規則の対象セグメントのターゲットモードにモード文字「%」が含まれていないことです.
第四条エラーの原因は、静的モード規則の3つの部分にモード文字「%」が含まれているからです.正しいのは後の二つだけモード文字「%」を含むことができます.
静的モード規則については、4.12静的モードを参照してください.
warning:-jN forced in submake:disabling jobserver mode.
この警告と次の警告情報は、makeが再帰的なmake呼び出しを検出したときに、通信可能なサブmakeプロセスに並列処理のエラーが発生しました.再帰的に実行されるmakeのコマンドラインパラメータには、「-jN」パラメータ(Nの値が1より大きい)があり、場合によっては、Makefileで変数「MAKE」が「make-j 2」に割り当てられ、再帰的に呼び出されるコマンドラインに変数「MAKE」が使用される場合があります.この場合、makeプロセスを呼び出しても他のmakeプロセスと通信することができず、単に独立した並列処理しかできない」と述べた.
warning:jobserver unavailable:using-j 1.Add`+to parent make rule.
makeプロセス間の通信のために、上部makeプロセスは、サブmakeプロセスに情報を伝達する.情報伝達の過程では、サブメークプロセスは実際のmakeプロセスではなく、上部makeはサブプロセスが本物のmakeプロセスかどうかを判断できない場合があるかもしれない.すべての情報を伝えるだけです.上部メークは通常のアルゴリズムを用いてこれらを決定した.このような場合、子プロセスは親プロセスの伝達部分の有用な情報だけを受け入れる.サブプロセスは、この警告情報を生成し、その内部に構築された順序で処理します.
私はMakefileを書きました.Linux 2.4でモジュールをコンパイルするためのものです.その内容は以下の通りです.
Makefile:9:**command commence before first target.Stop
すみません、私の間違いはどこですか?
目標を定義していません.一行を追加して、次のようになります.dsl 307:$(CC)$
私はモジュールを書きました.名前はzriphix_です.modules_001.
Makefile:5:**セパレータを抜けました.停止します
セパレータは何ですか?また、私のカーネルソースツリーはシステムのどの位置にありますか?
私が使っているシステムはuuntu 5.10です.
$(CC)$(MODFLAGS)-c zriphix_modules_001.
この行の一番前にTABがあります.第一列にはいけません.TABです.スペースではありません.
スドメークを実行します
また大きな串がありました.
参照:
gcc-Wall-DMODULE-D_uKERNEL_-DLNUX-c zarriphix_modules_001.In file includ from/usr/include/linux/sched.h:16,from/usr/include/linux/module.h:9,from zriphix_modules_001.cs:2:/usr/incluuude/linux/signal.h:2:warning:\33454;warning“You shoul warning”You shououldincluuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuddddcluuuuuuude/clclclclclclcluxxx/clclclclclcluxxxxxxxxxxxxxxxxxxxxclclclclclclclufrerererererererererererereretttttttttttttttttt9,from zriphix_modules_2:usr/incluude/linux/time.h:9:エラー:‘ststrut timespec’重定義/usr/include/lincluux/time.h:15:エラー:‘strut timeval’重定義/usuuuuuuuuuuuuude/linux/time/time.h/time.h:20:エラー:trtrtrtrtrtrtrtrtrucuctimeststinininininininininstststststststinininininggggtototototototototototototototototototototototototototototototototoststststststststrururururururururuzriphix_modules_001.cn:2:/usr/include/linux/module.h:41:エラー:フィールド‘atr’のタイプが不完全/usr/include/linux/module.h:49:エラー:フィールド‘Cobj’のタイプが完全ではないzriphix_modules_001.module’中:zriphix_modules_001.cn:5:警告:陰的宣言関数‘printk’make:*[zriphixumoduless u 001.o]エラー1
これはどういうことですか?
この問題を解決したのは、私のマシンの中にカーネルのソースツリーがないからです.
私は新しいカーネルソースのバッグを作って、コンパイルしましたが、インストールされていません.もう一度メークを通過します.
新しい問題ができました.insmoodでモジュールをロードする時にヒントを与えます.
insmod:error inserting'zriphix_modules_001.ko':-1 Invalid module format
気がふさぐ.絶対パスと相対パスを使っても、modprobeを使ってロードしてみましたが、エラーが表示されます.これはどういうことですか?
やっと解決しました.
コンパイルのカーネルがインストールされています.
make実行中に発生したエラーはすべて致命的ではない.特にコマンドラインの前に「-」がありますか?それともmakeが「-k」オプションで実行されます.make実行プロセスの致命的なエラーには、プレフィックス文字列「**」があります.エラー情報にはプレフィックスがあります.1つはエラープレフィックスとしてプログラム名を実行することです.もう一つは、makefile自体が文法エラーがあって、makeによって解析され実行できない場合、プレフィクスにはmakefileファイル名とエラーが発生した行番号が含まれている.
以下のエラーリストでは、通常のプレフィックスは省略されています.
[FOO]Error NN
[FOO]signal description
このような間違いはメークの本当の間違いではない.これは、makeがmakeを検出して実行コマンドとして呼び出されたプログラムがゼロではない状態に戻るか、またはこのコマンドプログラムが正常ではない方法で終了(何らかの信号を携帯)し、5.4コマンドのエラーを参照してください.
エラー情報に「*」の文字列が付加されていない場合は、サブプロシージャの呼び出しに失敗します.Makefileにこのコマンドがプレフィックス「-」があると、makeはこのエラーを無視します.
missing separator.Stop.
missing separator.Stop.
認識できないコマンドラインです.MakeはMakefileの読み取り中に含まれている内容を解析できません.GNU_makeは、Makefileを読み出す際に、Makefileの各行の内容を各種の区切り記号(:=,[TAB]文字など)によって識別する.これらのエラーは、makeが合法的なセパレータを発見できないことを意味する.
これらのエラーメッセージが発生する可能性のある理由は、(おそらくエディタでは、ほとんどms-windowsのエディタです)Makefileのコマンドの前に4つの(または8つの)スペースを使って[Tab]文字を代替しました.この場合、上記第二の形態でエラー情報が発生します.また、コマンド行はすべて「Tab」で始まるはずです.
command commence before first target.Stop.
missing rule before commands.Stp.
Makefileはコマンドラインで開始することができます.「Tab」の文字で開始しますが、合法的なコマンドライン(例えば変数の割り当て)ではありません.命令行は規則と一対一に対応しなければならない.
第二のエラーが発生した原因は、行の最初の非空文字がセミコロンである可能性があります.makeはここで規則の「target:prerequisite」部分が抜けていると考えられます.
No rule to make target`XXX'
No rule to make target`XXX',need by`yy'
再構築目標「XXX」のために適切な規則を見つけられませんでした.明確なルールと暗黙のルールが含まれています.
このエラーを修正する方法は、Makefileに再建対象のルールを追加することです.その他、これらのエラーの原因となる可能性があります.Makefileのファイル名のスペルミスまたはソースツリーを破壊しました.
No tagets specified and no makefile found.Stop.
No tagets.Stop.
最初のエラーは、コマンドラインに再構築対象が指定されておらず、makeはmakefileファイルを読み込めないことを示しています.第二のエラーは、makefileファイルを見つけることができますが、最終的な目標がない、または命令行で再構築が必要な目標を指摘していません.この場合、メークは何もしません.第9章を参照してmakeを実行します.
Makefile`XXX'was not found.
Includ makefile`XXX'was not found.
「-f」を使ってmakefileファイルを指定していません.makeは現在のディレクトリの下でデフォルトのMakefileを見つけることができません.「-f」でファイルを指定しますが、この指定されたmakefileファイルは読み込めません.
warning:overriding command for target`XXX'
warning:ignoring old command for target`XXX'
同じ目標の「XXX」に対して一つ以上の再構築命令が存在します.GNU makeでは、同じファイルを複数のルールの対象とする場合は、その再構築命令を規定する規則が一つしかないと規定しています.一つの目標のために何度も同じまたは異なる命令を指定したら、最初の警告が発生します.二つ目のアラーム情報は、新しく指定されたコマンドが前回のコマンドをカバーしたと言います.
Circuular XXX<-YY dependency dropped.
ルールの依存関係は循環を生みました.目標の「XXX」の依存ファイルは「YYY」で、「YYY」に依存する依存リストには「XXX」が含まれています.
Recursive variable`XXX'references itself.Stop.
makeの変数「XXX」(再帰的展開式)は、代替展開時に自身を参照します.直接展開型変数(通過:=定義)に対しても、定義(+=)を追加することは許されません.
Uneterminated variable reference.Stop.
変数または関数参照文法が正しくなく、完全な括弧(左括弧または右括弧が欠けています)が使用されていません.
insufficient argments to function`XXX'.Stop.
関数「XXX」参照時のパラメータ数が不正です.関数にパラメータがありません.
missing target pattern.Stop.
multile target patterns.Stop.
targt pattern contains no'.Stop. <<<====コンパイルしますSIM時に発生したエラー!
mixed implicit and static pattern rules. Stop.
不適切な静的モード規則.
第一条エラーの原因は、静的モード規則の目標セグメントにモードターゲットがないことです.
第二条エラーの原因は、静的モード規則の対象セグメントに複数のモードターゲットが存在することである.
第三条エラーの原因は、静的モード規則の対象セグメントのターゲットモードにモード文字「%」が含まれていないことです.
第四条エラーの原因は、静的モード規則の3つの部分にモード文字「%」が含まれているからです.正しいのは後の二つだけモード文字「%」を含むことができます.
静的モード規則については、4.12静的モードを参照してください.
warning:-jN forced in submake:disabling jobserver mode.
この警告と次の警告情報は、makeが再帰的なmake呼び出しを検出したときに、通信可能なサブmakeプロセスに並列処理のエラーが発生しました.再帰的に実行されるmakeのコマンドラインパラメータには、「-jN」パラメータ(Nの値が1より大きい)があり、場合によっては、Makefileで変数「MAKE」が「make-j 2」に割り当てられ、再帰的に呼び出されるコマンドラインに変数「MAKE」が使用される場合があります.この場合、makeプロセスを呼び出しても他のmakeプロセスと通信することができず、単に独立した並列処理しかできない」と述べた.
warning:jobserver unavailable:using-j 1.Add`+to parent make rule.
makeプロセス間の通信のために、上部makeプロセスは、サブmakeプロセスに情報を伝達する.情報伝達の過程では、サブメークプロセスは実際のmakeプロセスではなく、上部makeはサブプロセスが本物のmakeプロセスかどうかを判断できない場合があるかもしれない.すべての情報を伝えるだけです.上部メークは通常のアルゴリズムを用いてこれらを決定した.このような場合、子プロセスは親プロセスの伝達部分の有用な情報だけを受け入れる.サブプロセスは、この警告情報を生成し、その内部に構築された順序で処理します.
私はMakefileを書きました.Linux 2.4でモジュールをコンパイルするためのものです.その内容は以下の通りです.
INCLUDEDIR = /usr/src/linux-2.4/include
DEBFLAGS = -O2
CC = gcc
CFLAGS = -D__KERNEL__ -DMODULE -Wall $(DEBFLAGS)
CFLAGS += -I$(INCLUDEDIR)
TARGET = ds1307
OBJS = $(TARGET).o
SRC = $(TARGET).c
$(CC) $(CFLAGS)
メークを実行すると、エラーが発生しました.Makefile:9:**command commence before first target.Stop
すみません、私の間違いはどこですか?
目標を定義していません.一行を追加して、次のようになります.dsl 307:$(CC)$
私はモジュールを書きました.名前はzriphix_です.modules_001.
#include<linux/kernel.h>
#include<linux/module.h>
int init_module(){
printk("Hello World!
");
return 0;
}
void cleanup_module(){
printk("Bye-bye!
");
}
そしてMakefileを書きました.内容は以下の通りです.CC=gcc
MODFLAGS := -Wall -DMODULE -D__KERNEL__ -DLINUX
zariphix_modules_001.o: zariphix_modules_001.c /usr/include/linux/version.h
$(CC) $(MODFLAGS) -c zariphix_modules_001.c
メークをする時に以下のエラーを提示します.Makefile:5:**セパレータを抜けました.停止します
セパレータは何ですか?また、私のカーネルソースツリーはシステムのどの位置にありますか?
私が使っているシステムはuuntu 5.10です.
$(CC)$(MODFLAGS)-c zriphix_modules_001.
この行の一番前にTABがあります.第一列にはいけません.TABです.スペースではありません.
スドメークを実行します
また大きな串がありました.
参照:
gcc-Wall-DMODULE-D_uKERNEL_-DLNUX-c zarriphix_modules_001.In file includ from/usr/include/linux/sched.h:16,from/usr/include/linux/module.h:9,from zriphix_modules_001.cs:2:/usr/incluuude/linux/signal.h:2:warning:\33454;warning“You shoul warning”You shououldincluuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuddddcluuuuuuude/clclclclclclcluxxx/clclclclclcluxxxxxxxxxxxxxxxxxxxxclclclclclclclufrerererererererererererereretttttttttttttttttt9,from zriphix_modules_2:usr/incluude/linux/time.h:9:エラー:‘ststrut timespec’重定義/usr/include/lincluux/time.h:15:エラー:‘strut timeval’重定義/usuuuuuuuuuuuuude/linux/time/time.h/time.h:20:エラー:trtrtrtrtrtrtrtrtrucuctimeststinininininininininstststststststinininininggggtototototototototototototototototototototototototototototototototoststststststststrururururururururuzriphix_modules_001.cn:2:/usr/include/linux/module.h:41:エラー:フィールド‘atr’のタイプが不完全/usr/include/linux/module.h:49:エラー:フィールド‘Cobj’のタイプが完全ではないzriphix_modules_001.module’中:zriphix_modules_001.cn:5:警告:陰的宣言関数‘printk’make:*[zriphixumoduless u 001.o]エラー1
これはどういうことですか?
この問題を解決したのは、私のマシンの中にカーネルのソースツリーがないからです.
私は新しいカーネルソースのバッグを作って、コンパイルしましたが、インストールされていません.もう一度メークを通過します.
新しい問題ができました.insmoodでモジュールをロードする時にヒントを与えます.
insmod:error inserting'zriphix_modules_001.ko':-1 Invalid module format
気がふさぐ.絶対パスと相対パスを使っても、modprobeを使ってロードしてみましたが、エラーが表示されます.これはどういうことですか?
やっと解決しました.
コンパイルのカーネルがインストールされています.