未定义对“WinMain@16”的引用 minGW32-make 错误
Undefined reference to `WinMain@16' minGW32-make error
我正在尝试在 Windows 上编译 GLFW 示例代码。如果我输入命令:
g++ main.cpp -Ideps/include/ -Ldeps/lib/ -lglfw3 -lopengl32 -lgdi32
直接进入命令提示符,然后它编译得很好。但是我想使用 makefile,当我这样做时,我得到以下输出。
g++ -g -Wall -Ideps/include/ -c main.cpp
g++ -Ldeps/lib/ -lglfw3_win32 -lopengl32 -lgdi32 -o main.o
c:/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../libmingw32.a(main.o):(.text.startup+0xa7): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
Makefile_WIN32:8: recipe for target 'test.exe' failed
mingw32-make: *** [test.exe] Error 1
我使用的 makefile 是
PROG = test.exe
CC = g++
CPPFLAGS = -g -Wall -Ideps/include/
LDFLAGS = -Ldeps/lib/ -lglfw3_win32 -lopengl32 -lgdi32
OBJS = main.o
$(PROG) : $(OBJS)
$(CC) $(LDFLAGS) -o $(OBJS)
main.o :
$(CC) $(CPPFLAGS) -c main.cpp
我用命令调用它
mingw32-make -f Makefile_WIN32
我对 makefile 比较陌生,所以我不知道问题出在哪里,所以非常感谢您的帮助。我唯一的猜测是它不是源代码,因为它可以使用 g++
命令编译,并且在我的 mac (因此是非标准的 makefile 名称)上使用类似的 makefile.
链接时为什么-o $(OBJS)
?这应该是 -o $(PROG) $(OBJS)
。您正在尝试覆盖 main.o 文件而不是使用它...
编辑:此外,在没有 make 的情况下构建时,您使用的不是相同的命令,您使用 -lglfw3
而在 makefile 中使用 -lglfw3_win32
.
编辑 2(查看评论):有时需要在链接时将库标志放在目标之后,这给出:
$(CC)-o $(OBJS) $(LDFLAGS)
我正在尝试在 Windows 上编译 GLFW 示例代码。如果我输入命令:
g++ main.cpp -Ideps/include/ -Ldeps/lib/ -lglfw3 -lopengl32 -lgdi32
直接进入命令提示符,然后它编译得很好。但是我想使用 makefile,当我这样做时,我得到以下输出。
g++ -g -Wall -Ideps/include/ -c main.cpp
g++ -Ldeps/lib/ -lglfw3_win32 -lopengl32 -lgdi32 -o main.o
c:/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../libmingw32.a(main.o):(.text.startup+0xa7): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
Makefile_WIN32:8: recipe for target 'test.exe' failed
mingw32-make: *** [test.exe] Error 1
我使用的 makefile 是
PROG = test.exe
CC = g++
CPPFLAGS = -g -Wall -Ideps/include/
LDFLAGS = -Ldeps/lib/ -lglfw3_win32 -lopengl32 -lgdi32
OBJS = main.o
$(PROG) : $(OBJS)
$(CC) $(LDFLAGS) -o $(OBJS)
main.o :
$(CC) $(CPPFLAGS) -c main.cpp
我用命令调用它
mingw32-make -f Makefile_WIN32
我对 makefile 比较陌生,所以我不知道问题出在哪里,所以非常感谢您的帮助。我唯一的猜测是它不是源代码,因为它可以使用 g++
命令编译,并且在我的 mac (因此是非标准的 makefile 名称)上使用类似的 makefile.
链接时为什么-o $(OBJS)
?这应该是 -o $(PROG) $(OBJS)
。您正在尝试覆盖 main.o 文件而不是使用它...
编辑:此外,在没有 make 的情况下构建时,您使用的不是相同的命令,您使用 -lglfw3
而在 makefile 中使用 -lglfw3_win32
.
编辑 2(查看评论):有时需要在链接时将库标志放在目标之后,这给出:
$(CC)-o $(OBJS) $(LDFLAGS)