如何通过命令提示符在 Windows 上编译 GLFW 程序?
How to compile a GLFW program on Windows via command prompt?
我正在尝试使用 OpenGL 和 GLFW 制作一个非常简单的游戏。我的当前代码在 Ubuntu 上编译没有问题,但是当我在 Windows 上尝试时,我遇到了各种未解决的外部错误。
我的 main.cpp
和 game.h
文件中都包含:
#include<GLFW/glfw3.h>
我试过使用:
#define GLFW_DLL
#include<GLFW/glfw3.h>
然后 linking glfwdll.lib
而不是 glfw3.lib
,这解决了一些错误,但不是全部。无论哪种方式,我都在 Ubuntu 上使用静态库,所以我也想在 Windows 上使用它。
研究之后,我尝试包括 User32.lib
和 kernel32.lib
,删除默认库(使用 Zl),以及其他一些我不记得的东西(但它们没用)。
我当前的编译命令是这样的:
@echo off
cl /Zl /MT game.cpp /I C:\dev\include /link "C:\Program Files (x86)\Windows Kits.1\Lib\winv6.3\um\x64\User32.lib" "C:\Program Files (x86)\Windows Kits.1\Lib\winv6.3\um\x64\kernel32.lib" C:\dev\lib\glfw3.lib C:\dev\lib\OpenGL32.lib
cl /Zl main.cpp /I C:\dev\include /link C:\dev\lib\glfw3.lib C:\Users\Daniel\projects\game\game.obj C:\dev\lib\OpenGL32.lib "C:\Program Files (x86)\Windows Kits.1\Lib\winv6.3\um\x64\User32.lib" "C:\Program Files (x86)\Windows Kits.1\Lib\winv6.3\um\x64\kernel32.lib"
有了这个,目标文件编译没有问题,但是对于主文件,我的目标文件中的所有 glfw 和 openGl 函数(无论我是否使用它们)总是出现未解决的外部错误,它们是来自目标文件和 glfw.lib 文件。
真正让我困惑的是我的游戏 class 目标文件编译没有任何问题,但是当我 link 它时它有错误。
有人知道如何编译吗?
我已经研究了一段时间了,我发现有人说如果您使用 32 位二进制文件它就可以工作。当我遇到这个问题时,我一直在使用 64 位二进制文件。我下载了32位二进制文件,用同样的方法试了一下,编译没问题。
我不知道这是为什么,但对于遇到我问题的任何人,32 位二进制文件都有效。
我遇到了与您描述的完全相同的问题,我尝试了完全相同的解决方案,这些解决方案确实消除了 opengl 函数的链接错误,但 glfw 函数的链接错误仍然存在。然后我下载了 64 位 glfw 二进制文件并尝试了 64 位 glfw 二进制文件而不是 32 位 glfw 二进制文件并且它有效!我不知道这是因为我使用的是 64 位机器,还是因为我有适用于 64 位机器的 mingw(我有 x86_64-w64-mingw32)。我的建议是同时尝试 64 位 glfw 和 32 位 glfw 二进制文件。下面是我编译链接项目成功后在命令提示符下写的gcc main.c libglfw3.a -lopengl32 -lgdi32
。如果这不起作用,请尝试编写 gcc main.c libglfw3.a -lopengl32 -lgdi32 -lkernel32 -luser32 -lws2_32
。
值得一提的是,我将 libglfw3.a 文件与 main.c 文件放在同一目录中。希望对您有所帮助!
我正在尝试使用 OpenGL 和 GLFW 制作一个非常简单的游戏。我的当前代码在 Ubuntu 上编译没有问题,但是当我在 Windows 上尝试时,我遇到了各种未解决的外部错误。
我的 main.cpp
和 game.h
文件中都包含:
#include<GLFW/glfw3.h>
我试过使用:
#define GLFW_DLL
#include<GLFW/glfw3.h>
然后 linking glfwdll.lib
而不是 glfw3.lib
,这解决了一些错误,但不是全部。无论哪种方式,我都在 Ubuntu 上使用静态库,所以我也想在 Windows 上使用它。
研究之后,我尝试包括 User32.lib
和 kernel32.lib
,删除默认库(使用 Zl),以及其他一些我不记得的东西(但它们没用)。
我当前的编译命令是这样的:
@echo off
cl /Zl /MT game.cpp /I C:\dev\include /link "C:\Program Files (x86)\Windows Kits.1\Lib\winv6.3\um\x64\User32.lib" "C:\Program Files (x86)\Windows Kits.1\Lib\winv6.3\um\x64\kernel32.lib" C:\dev\lib\glfw3.lib C:\dev\lib\OpenGL32.lib
cl /Zl main.cpp /I C:\dev\include /link C:\dev\lib\glfw3.lib C:\Users\Daniel\projects\game\game.obj C:\dev\lib\OpenGL32.lib "C:\Program Files (x86)\Windows Kits.1\Lib\winv6.3\um\x64\User32.lib" "C:\Program Files (x86)\Windows Kits.1\Lib\winv6.3\um\x64\kernel32.lib"
有了这个,目标文件编译没有问题,但是对于主文件,我的目标文件中的所有 glfw 和 openGl 函数(无论我是否使用它们)总是出现未解决的外部错误,它们是来自目标文件和 glfw.lib 文件。
真正让我困惑的是我的游戏 class 目标文件编译没有任何问题,但是当我 link 它时它有错误。
有人知道如何编译吗?
我已经研究了一段时间了,我发现有人说如果您使用 32 位二进制文件它就可以工作。当我遇到这个问题时,我一直在使用 64 位二进制文件。我下载了32位二进制文件,用同样的方法试了一下,编译没问题。
我不知道这是为什么,但对于遇到我问题的任何人,32 位二进制文件都有效。
我遇到了与您描述的完全相同的问题,我尝试了完全相同的解决方案,这些解决方案确实消除了 opengl 函数的链接错误,但 glfw 函数的链接错误仍然存在。然后我下载了 64 位 glfw 二进制文件并尝试了 64 位 glfw 二进制文件而不是 32 位 glfw 二进制文件并且它有效!我不知道这是因为我使用的是 64 位机器,还是因为我有适用于 64 位机器的 mingw(我有 x86_64-w64-mingw32)。我的建议是同时尝试 64 位 glfw 和 32 位 glfw 二进制文件。下面是我编译链接项目成功后在命令提示符下写的gcc main.c libglfw3.a -lopengl32 -lgdi32
。如果这不起作用,请尝试编写 gcc main.c libglfw3.a -lopengl32 -lgdi32 -lkernel32 -luser32 -lws2_32
。
值得一提的是,我将 libglfw3.a 文件与 main.c 文件放在同一目录中。希望对您有所帮助!