如何在Windows上链接GLFW 我想学习如何用C++来使用OpenGL,我在教程后面跟着。我是教程的一部分,我正在使用GLFW。我试着按照指示建造GLFW

如何在Windows上链接GLFW 我想学习如何用C++来使用OpenGL,我在教程后面跟着。我是教程的一部分,我正在使用GLFW。我试着按照指示建造GLFW,c++,opengl,glfw,C++,Opengl,Glfw,从网站下载GLFW二进制文件包后,或 你自己编译了这个库,你会在include中找到标题 文件夹和其中一个库文件夹中的编译器库 -将适当的lib文件夹添加到库路径并链接到GLFW -将包含文件夹添加到包含路径 我下载了它,并将include文件夹移动到我的MinGW include文件夹中,但我不确定在哪里找到lib文件夹,如何将其添加到我的库路径,或者如何将其与OpenGL链接。教程中没有解释这一点,我在网上找不到任何关于这意味着什么或如何做的说明。在尝试运行教程中的测试代码时,我没有执行其他

从网站下载GLFW二进制文件包后,或 你自己编译了这个库,你会在include中找到标题 文件夹和其中一个库文件夹中的编译器库

-将适当的lib文件夹添加到库路径并链接到GLFW

-将包含文件夹添加到包含路径

我下载了它,并将include文件夹移动到我的MinGW include文件夹中,但我不确定在哪里找到lib文件夹,如何将其添加到我的库路径,或者如何将其与OpenGL链接。教程中没有解释这一点,我在网上找不到任何关于这意味着什么或如何做的说明。在尝试运行教程中的测试代码时,我没有执行其他两个步骤:

#include <GLFW/glfw3.h>
#include <thread>

int main()
{
    glfwInit();
    std::this_thread::sleep_for(std::chrono::seconds(1));
    glfwTerminate();
}
我在编译器标志中添加了-std=c++11,收到了以下错误:

In file included from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\thread:35:0,
                 from D:\Files\Documents\Programming\opengl_tut.cpp:2:
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
D:\Files\Documents\Programming\opengl_tut.cpp: In function 'int main()':
D:\Files\Documents\Programming\opengl_tut.cpp:7:10: error: 'std::this_thread' has not been declared
     std::this_thread::sleep_for(std::chrono::seconds(1));
考虑到问题可能只是std::this_线程,我从程序中删除了该行,并运行它以查看初始化和终止GLFW是否会返回任何错误。我明白了:

C:\Users\Brett\AppData\Local\Temp\ccCJrDGj.o:opengl_tut.cpp:(.text+0xc): undefined reference to `glfwInit'
C:\Users\Brett\AppData\Local\Temp\ccCJrDGj.o:opengl_tut.cpp:(.text+0x11): undefined reference to `glfwTerminate'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: C:\Users\Brett\AppData\Local\Temp\ccCJrDGj.o: bad reloc address 0x20 in section `.eh_frame'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
我想这可能是因为我跳过了教程的前几部分

TL;DR

  • 尝试按照教程使用OpenGL
  • 无法找到如何链接GLFW
  • 找不到库文件夹
  • 获取与std::此线程相关的错误
  • 获取与GLFW相关的错误
编辑

我在GLFW网站上找到一些信息,说要使用Cmake。我下载了它,并尝试使用它从下载的文件进行构建。它创建了一个新文件夹,但我不确定该如何处理它。

  • 首先,在VisualStudio中很容易进行这样的配置,只需NuGet,搜索glfw、安装,Visual Studi/NuGet将处理所有事情,如设置正确的包含路径、附加库路径、添加附加库文件
  • 第二,它看起来像是您的链接问题,请尝试将这些添加到您的gcc命令行中
    • g++-o example.exe example.o-L-lexample\u dll
  • 第三,检查下载的glfw库,使用
    MinGW-w64
    lib文件。还要记住区分静态库和动态库
      • 首先,在VisualStudio中很容易进行这样的配置,只需NuGet,搜索glfw、安装,Visual Studi/NuGet将处理所有事情,如设置正确的包含路径、附加库路径、添加附加库文件
      • 第二,它看起来像是您的链接问题,请尝试将这些添加到您的gcc命令行中
        • g++-o example.exe example.o-L-lexample\u dll
      • 第三,检查下载的glfw库,使用
        MinGW-w64
        lib文件。还要记住区分静态库和动态库

      看起来您已经下载了源文件。这将需要构建(使用CMake)。你应该去下载预编译的二进制文件。要执行此操作,请返回glfw.org,不要点击主页上的下载按钮,而是转到右上角的下载选项卡,在“Windows预编译二进制文件”下选择32位或64位版本,然后单击下载

      然后,当您从.zip文件夹中解压缩时,您应该会在其中找到几个文件夹—包括文件夹,以及名称以“lib”开头的文件夹(如lib-mingw、lib-mingw-w64、lib-vc2010、lib-vc2012等)。你只需要其中一个,这取决于你使用的编译器——明文或Visual C++(VC)。选择适当的文件夹,并在其中找到.lib和.dll文件

      现在,无论何时编译OpenGL程序,都必须告诉编译器(实际上是链接器)将这些文件链接到程序的目标文件。您可以通过使用适当的编译器命令行参数来实现这一点。您可以在MinGW中阅读以下内容:

      对于该教程,您可能只需要链接glfw3.lib(对于MSVC)或libglfw3.a(对于MinGW)。如果您使用的是GLEW,那么可能只需要glew32.lib和glew32.dll(后者位于“bin”文件夹中,而不是“lib”文件夹中)


      希望这有助于回答您的问题。

      看起来您已经下载了源文件。这将需要构建(使用CMake)。你应该去下载预编译的二进制文件。要执行此操作,请返回glfw.org,不要点击主页上的下载按钮,而是转到右上角的下载选项卡,在“Windows预编译二进制文件”下选择32位或64位版本,然后单击下载

      然后,当您从.zip文件夹中解压缩时,您应该会在其中找到几个文件夹—包括文件夹,以及名称以“lib”开头的文件夹(如lib-mingw、lib-mingw-w64、lib-vc2010、lib-vc2012等)。你只需要其中一个,这取决于你使用的编译器——明文或Visual C++(VC)。选择适当的文件夹,并在其中找到.lib和.dll文件

      现在,无论何时编译OpenGL程序,都必须告诉编译器(实际上是链接器)将这些文件链接到程序的目标文件。您可以通过使用适当的编译器命令行参数来实现这一点。您可以在MinGW中阅读以下内容:

      对于该教程,您可能只需要链接glfw3.lib(对于MSVC)或libglfw3.a(对于MinGW)。如果您使用的是GLEW,那么可能只需要glew32.lib和glew32.dll(后者位于“bin”文件夹中,而不是“lib”文件夹中)


      希望这有助于回答您的问题。

      最后一件事是链接器错误。它告诉您必须将程序链接到相应的glfw库。不要将任何东西(头、库等)安装到编译器工具链的安装目录中。始终为第三方库(头文件、源文件、二进制文件)创建单独的目录树,并将该目录配置为编译器和链接器搜索的一部分