gpt4 book ai didi

c++ - MinGW 烦人的行为,有时编译,有时不编译?

转载 作者:太空狗 更新时间:2023-10-29 23:06:14 27 4
gpt4 key购买 nike

我正在使用 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。它指责的文件开头没有什么特别之处,它甚至指责其他文件。这确实令人困惑和恼人,并且确实减慢了我的进度。

最佳答案

这条规则是错误的:

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

它会导致 $(CC) 被调用,除了目标文件之外,还使用头文件列表作为输入。编译器会尝试将头文件预编译到输出文件bazglx.exe(一个接一个,每次覆盖之前的一个),然后它将目标文件链接到输出文件(覆盖再次)以产生输出。

您希望您的链接步骤仅涉及目标文件和库。

我怀疑您遇到了一个错误(而且只是有时出现),因为在 GCC 尝试预编译 include/player 时,某些东西阻止了它打开 bazglx.exe 文件。 h.如果您自己键入以下命令,您可以看到类似的效果(尽管第二行可能有不同的错误):

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

也许防病毒软件正在打开并处理 bazglx.exe 的重复新实例,有时在 GCC 想要重新创建它之前没有完成处理?

关于c++ - MinGW 烦人的行为,有时编译,有时不编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16502416/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com