MinGW32 链接错误 - 在一个命令中构建,但使用 Makefile 失败
MinGW32 linking error - builds in one command, but fails using Makefile
我遇到的问题与构建 GLFW 示例有关。在命令提示符中,如果我尝试使用一行(如下所示)构建程序,那么它就可以工作。
g++ -g -Wall -Ideps/include/ main.cpp -Ldeps/lib/ -lglfw3 -lopengl32 -lgdi32 -o test.exe
但是我打算使用以下 Makefile 来构建它。
PROG = test.exe
CC = g++
CPPFLAGS = -g -Wall -Ideps/include/
LDFLAGS = -Ldeps/lib/ -lglfw3
LDFLAGS += -lopengl32 -lgdi32
OBJS = main.o
$(PROG) : $(OBJS)
$(CC) $(LDFLAGS) -o $(PROG) $(OBJS)
main.o :
$(CC) $(CPPFLAGS) -c main.cpp
但是当我这样做时,我 运行 出现了以下错误:
main.o: In function `main':
C:\Users\Kieran\GLFWtest/main.cpp:9: undefined reference to `glfwSetErrorCallback'
C:\Users\Kieran\GLFWtest/main.cpp:10: undefined reference to `glfwInit'
C:\Users\Kieran\GLFWtest/main.cpp:12: undefined reference to `glfwCreateWindow'
C:\Users\Kieran\GLFWtest/main.cpp:15: undefined reference to `glfwTerminate'
C:\Users\Kieran\GLFWtest/main.cpp:18: undefined reference to `glfwMakeContextCurrent'
C:\Users\Kieran\GLFWtest/main.cpp:19: undefined reference to `glfwSwapInterval'
C:\Users\Kieran\GLFWtest/main.cpp:20: undefined reference to `glfwSetKeyCallback'
C:\Users\Kieran\GLFWtest/main.cpp:25: undefined reference to `glfwGetFramebufferSize'
C:\Users\Kieran\GLFWtest/main.cpp:27: undefined reference to `_imp__glViewport@16'
C:\Users\Kieran\GLFWtest/main.cpp:28: undefined reference to `_imp__glClear@4'
C:\Users\Kieran\GLFWtest/main.cpp:29: undefined reference to `_imp__glMatrixMode@4'
C:\Users\Kieran\GLFWtest/main.cpp:30: undefined reference to `_imp__glLoadIdentity@0'
C:\Users\Kieran\GLFWtest/main.cpp:31: undefined reference to `_imp__glOrtho@48'
C:\Users\Kieran\GLFWtest/main.cpp:32: undefined reference to `_imp__glMatrixMode@4'
C:\Users\Kieran\GLFWtest/main.cpp:33: undefined reference to `_imp__glLoadIdentity@0'
还有一些错误,但它们只是更多的未定义引用。我通过手动调用以下两个命令尝试 运行 编译 Makefile,一个是编译,一个是链接。它编译正常,但在链接时给出与上面相同的错误,
g++ -g -Wall -Ideps/include/ -c main.cpp
g++ -Ldeps/lib/ -lglfw3 -lopengl32 -lgdi32 -o test.exe main.o
我不知道为什么在一行中构建它是有效的,但是当使用我认为本质上相同的过程时编译然后链接失败。我对 Makefiles 比较陌生,所以我可能犯了一些菜鸟错误,但我的搜索未能产生任何答案。我还想指出,在我的 Mac 上使用类似的 Makefile 构建没有任何问题。
非常感谢任何帮助,谢谢。
尝试将 .o
个文件 放在 -l*
标志之前。
像这样:g++ main.o -Ldeps/lib/ -lglfw3 -lopengl32 -lgdi32 -o test.exe
并以同样的方式修改makefile。
我遇到的问题与构建 GLFW 示例有关。在命令提示符中,如果我尝试使用一行(如下所示)构建程序,那么它就可以工作。
g++ -g -Wall -Ideps/include/ main.cpp -Ldeps/lib/ -lglfw3 -lopengl32 -lgdi32 -o test.exe
但是我打算使用以下 Makefile 来构建它。
PROG = test.exe
CC = g++
CPPFLAGS = -g -Wall -Ideps/include/
LDFLAGS = -Ldeps/lib/ -lglfw3
LDFLAGS += -lopengl32 -lgdi32
OBJS = main.o
$(PROG) : $(OBJS)
$(CC) $(LDFLAGS) -o $(PROG) $(OBJS)
main.o :
$(CC) $(CPPFLAGS) -c main.cpp
但是当我这样做时,我 运行 出现了以下错误:
main.o: In function `main':
C:\Users\Kieran\GLFWtest/main.cpp:9: undefined reference to `glfwSetErrorCallback'
C:\Users\Kieran\GLFWtest/main.cpp:10: undefined reference to `glfwInit'
C:\Users\Kieran\GLFWtest/main.cpp:12: undefined reference to `glfwCreateWindow'
C:\Users\Kieran\GLFWtest/main.cpp:15: undefined reference to `glfwTerminate'
C:\Users\Kieran\GLFWtest/main.cpp:18: undefined reference to `glfwMakeContextCurrent'
C:\Users\Kieran\GLFWtest/main.cpp:19: undefined reference to `glfwSwapInterval'
C:\Users\Kieran\GLFWtest/main.cpp:20: undefined reference to `glfwSetKeyCallback'
C:\Users\Kieran\GLFWtest/main.cpp:25: undefined reference to `glfwGetFramebufferSize'
C:\Users\Kieran\GLFWtest/main.cpp:27: undefined reference to `_imp__glViewport@16'
C:\Users\Kieran\GLFWtest/main.cpp:28: undefined reference to `_imp__glClear@4'
C:\Users\Kieran\GLFWtest/main.cpp:29: undefined reference to `_imp__glMatrixMode@4'
C:\Users\Kieran\GLFWtest/main.cpp:30: undefined reference to `_imp__glLoadIdentity@0'
C:\Users\Kieran\GLFWtest/main.cpp:31: undefined reference to `_imp__glOrtho@48'
C:\Users\Kieran\GLFWtest/main.cpp:32: undefined reference to `_imp__glMatrixMode@4'
C:\Users\Kieran\GLFWtest/main.cpp:33: undefined reference to `_imp__glLoadIdentity@0'
还有一些错误,但它们只是更多的未定义引用。我通过手动调用以下两个命令尝试 运行 编译 Makefile,一个是编译,一个是链接。它编译正常,但在链接时给出与上面相同的错误,
g++ -g -Wall -Ideps/include/ -c main.cpp
g++ -Ldeps/lib/ -lglfw3 -lopengl32 -lgdi32 -o test.exe main.o
我不知道为什么在一行中构建它是有效的,但是当使用我认为本质上相同的过程时编译然后链接失败。我对 Makefiles 比较陌生,所以我可能犯了一些菜鸟错误,但我的搜索未能产生任何答案。我还想指出,在我的 Mac 上使用类似的 Makefile 构建没有任何问题。
非常感谢任何帮助,谢谢。
尝试将 .o
个文件 放在 -l*
标志之前。
像这样:g++ main.o -Ldeps/lib/ -lglfw3 -lopengl32 -lgdi32 -o test.exe
并以同样的方式修改makefile。