我正在尝试在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。
答案 0 :(得分:0)
链接时为何-o $(OBJS)
?这应该是-o $(PROG) $(OBJS)
。您正试图覆盖您的main.o文件而不是使用它...
编辑:此外,在没有make的情况下构建时,您没有使用相同的命令,而在使用-lglfw3
的makefile中使用-lglfw3_win32
。
编辑2(查看评论):有时在链接时将库标志放在目标之后是必要的,这给出了:
$(CC)-o $(OBJS) $(LDFLAGS)