3

msys と MinGW を使用して小さなプロジェクトをコンパイルおよびデバッグしています。場合によっては、問題なくコンパイルできますが、約 2/3 の時間で次のエラー メッセージが出力されます。

include/player.h:1:0: fatal error: can't create precompiled header
bazglx.exe:invalid argument
compilation terminated.
make: *** [bazglx.exe] Error 1

一番上の行はフィンランド語だったので、翻訳しなければなりませんでした。英語と同じではないかもしれません。これが私のメイクファイルです:

CC = g++

IDIR = include
ODIR = obj
SDIR = src


CFLAGS = -I $(IDIR) -static-libgcc -static-libstdc++ -Wall -ggdb
LFLAGS = -lSDL_gfx

_OBJ = main.o init.o mainloop.o render.o map.o player.o
_DEPS = init.h mainloop.h render.h map.h player.h

OBJ = $(patsubst %.o, $(ODIR)/%.o, $(_OBJ))
DEPS = $(patsubst %.h, $(IDIR)/%.h, $(_DEPS))

$(ODIR)/%.o:$(SDIR)/%.cpp
    $(CC) $^ -o $@ `sdl-config --cflags` $(CFLAGS) -c

bazglx.exe:$(OBJ) $(DEPS)
    $(CC) $^ -o $@ `sdl-config --libs --cflags` $(CFLAGS) $(LFLAGS)

エラー メッセージが表示されることもありますが、破損した exe が作成されます。非難するファイルの先頭には特別なことは何もなく、他のファイルを非難することさえあります。これは本当に混乱し、迷惑であり、私の進歩を本当に遅らせています.

4

1 に答える 1

1

このルールは間違っています:

bazglx.exe:$(OBJ) $(DEPS)
    $(CC) $^ -o $@ `sdl-config --libs --cflags` $(CFLAGS) $(LFLAGS)

$(CC)オブジェクトファイルに加えて、ヘッダーファイルのリストを入力として呼び出します。コンパイラは、ヘッダーを出力ファイルにプリコンパイルしようとしbazglx.exe(1 つずつ、前のファイルを上書きするたびに)、オブジェクト ファイルを出力ファイルにリンクし (再び上書きします)、出力を生成します。

オブジェクト ファイルとライブラリのみをリンク ステップに含める必要があります。

bazglx.exeプリコンパイルしようとしているときにGCC がファイルを開くのを何かが妨げているため、エラーが発生していると思われます (そして時々発生するだけです) include/player.h。次のコマンドを自分で入力すると、同様の効果が見られます (ただし、おそらく 2 行目のエラーは異なります)。

g++ include/player.h -o some-non-directory/bazglx.exe

アンチウイルスが の新しいインスタンスを繰り返し開いて処理している可能性がありますがbazglx.exe、GCC が再作成する前にその処理が行われないことがありますか?

于 2013-05-15T05:03:41.700 に答える