使用MinGW设置GLFW

10

我正在尝试使用GLFW学习OpenGL,但是遇到了一些问题。

这是我的main.cpp文件:

#include <GL/glfw.h>

int main()
{
    glfwInit();
    glfwSleep( 1.0 );
    glfwTerminate();
}

这是我的项目文件夹结构:

Project
+- glfw.dll
+- main.cpp

我从这里提取了GLFW文件:

MinGW
+- include
|   +- GL
|      +- glfw.h
+- lib
   +- libglfw.a
   +- libglfwdll.a

这是我尝试构建程序的方式:

g++ main.cpp -o main.exe -lglfwdll

这是我收到的错误信息:

C:\Users\Dark\AppData\Local\Temp\cc0ZgTVp.o:main.cpp:(.text+0xf): undefined reference to `_glfwInit'
C:\Users\Dark\AppData\Local\Temp\cc0ZgTVp.o:main.cpp:(.text+0x25): undefined reference to `_glfwSleep'
C:\Users\Dark\AppData\Local\Temp\cc0ZgTVp.o:main.cpp:(.text+0x2a): undefined reference to `_glfwTerminate'
collect2.exe: error: ld returned 1 exit status

我有什么遗漏吗?


使用大写字母L选项指定库的路径,例如g++ ... -L /path/to/lib。同时请记住,MinGW使用与Visual Studio不同的ABIs集,因此请确保您为MinGW编译的所有库都是针对MinGW编译的。 - Ken
我尝试了很多文件夹来包含-L,包括glfw.dll所在的D:\Dropbox\C++\Untitled,但是没有成功。我下载的.zip文件有一个单独的lib-mingw文件夹,因此我认为这些是正确的库。 - Darkwater
codeblocks在Windows下使用MinGW,所以我想你可以通过阅读这篇文章来解决你的问题:https://dev59.com/ZFzUa4cB1Zd3GeqP3nkX - Ken
"g++ -print-search-dirs" 这个命令将打印 g++ 考虑的所有路径,如果库不在这里,您需要使用“-L”选项添加它。可能会有其他问题,但我目前没有在 Windows 上进行编程,而且自从几天和几个月以来我都没有碰过 Windows,但是你可能会遇到非常讨厌的行为,比如来自 UAC 的用户限制或不同的 ABI 规范。如果您想解决这个问题,只需使用 Codeblocks,您将使用与现在相同的 MinGW,并且至少获得对其的支持。大多数这些问题只是由 Windows 操作系统引起的,而不是MinGW本身。 - Ken
1
我已经尝试了一百种解决方案,但都放弃了。现在我要尝试SFML。 - Darkwater
显示剩余2条评论
3个回答

12

根据您的环境,从这里下载二进制文件。

Project
+- glfw3.dll (You can put it in System32 or SysWOW64 instead.)
+- main.cpp

MinGW
+- include
|   +- GLFW
|      +- glfw3.h
+- lib
   +- libglfw3.a
   +- libglfw3dll.a (Renamed from glfw3dll.a)

g++ -c main.cpp
g++ -o main.exe main.o -lglfw3dll -lopengl32

8
有没有人为MingW预打包GLFW,以便我们无需麻烦地自己去做?如果有,这应该能将可以尝试使用OpenGL的程序员数量提高一个量级。我的天啊,现在已经是2014年了,Windows竟然还没有提供一种标准化的软件安装机制,可以让所有东西都直接正常地运行。 - Nordlöw
1
2019年5月,仍然没有GLFW的软件包,请告诉我我错了。 - Kaiser Keister
1
pacman -S mingw-w64-glfw,msys2命令与mingw64一起使用glfw - aeb-dev
如果有人需要帮助的话,根据@MrMuMu的评论,我不得不使用pacman -S mingw-w64-x86_64-glfw安装mingw-w64-x86_64-glfw包,并使用g++ main.cpp -I/mingw64/include/ -L/mingw64/lib -lglfw3 -lopengl32进行编译(尽管我可能已经以某种方式配置错误了我的路径)。 - Christian Reall-Fluharty
@ChristianReall-Fluharty,我能得到一些帮助吗? - SHikha Mittal

0

我创建了一个Makefile,它是用于C语言的,但你可以进行编辑:

all:
    gcc -I ./include ./src/*.c -L ./lib -lglfw3dll -lopengl32 -lmingw32 -lgdi32 -luser32 -lkernel32 -lglew32 -o ./bin/main

openglfolder:.
│   

makefile

│
├───bin
│       glew32.dll
│       glfw3.dll
│       main.exe

│
├───include
│       eglew.h
│       glew.h
│       glfw3.h
│       glxew.h
│       wglew.h

│
├───lib
│       glew32.dll
│       glew32.lib
│       glew32s.lib
│       libglfw3.a
│       libglfw3dll.a

│
└───src
        main.c

编辑:此方法仅适用于Windows操作系统。


0
如果您正在使用带有MSYS2的MinGW64,请在编译器中安装glfw库。打开MSYS2 MINGW64控制台并输入以下内容:
pacman -S mingw-w64-x86_64-glfw

然后使用以下标志编译您的项目:-lglfw3 -lkernel32 -lopengl32 -lglu32

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接