如何在Windows上链接GLFW

时间:2015-09-02 08:09:30

标签: c++ opengl glfw

我希望学习如何在C ++中使用OpenGL,我正在open.gl学习本教程。我在教程的this部分,我正在使用GLFW。我尝试按照说明构建GLFW,

  

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

     

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

     

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

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

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

int main()
{
    glfwInit();
    std::this_thread::sleep_for(std::chrono::seconds(1));
    glfwTerminate();
}

我收到了这个错误:

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.

我在编译器标志中添加了-std = c ++ 11,我收到了这个错误:

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_thread,我从程序中删除了该行,并运行它以查看初始化和终止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
  • 找不到lib文件夹
  • 收到与std :: this_thread相关的错误
  • 收到与GLFW相关的错误

修改

我在GLFW网站上发现了一些使用Cmake的信息。我下载了它并尝试使用它从下载的文件构建。它创建了一个新文件夹,但我不知道该怎么做。

2 个答案:

答案 0 :(得分:0)

  • 首先,在Visual Studio中进行此类配置很简单,只需要NuGet,然后搜索glfw,安装,Visual Studi / NuGet将处理所有设置正确的包含路径,附加库路径,添加其他库文件< / LI>
  • 其次,它看起来像您的链接问题,尝试将这些添加到您的gcc cmd行
    • g++ -o example.exe example.o -L. -lexample_dll
  • 第三,检查下载的glfw库,使用MinGW-w64 lib文件。还记得区分静态和动态库

答案 1 :(得分:0)

您似乎已经下载了源文件。这将需要构建(使用CMake)。您应该下载预编译的二进制文件。为此,请返回glfw.org,而不是单击主页上的下载按钮,而是转到右上方的下载选项卡,然后在“ Windows预编译的二进制文件”下选择32位或64位版本,然后单击下载。 。 https://www.datadoghq.com/blog/datadog-mobile-rum/

然后,当您从.zip文件夹中提取内容时,应该在其中找到几个文件夹-包含文件夹以及名称以“ lib”开头的文件夹(例如lib-mingw,lib-mingw-w64,lib-vc2010 ,lib-vc2012等)。您只需要其中之一,这取决于您使用的编译器-minGW或Visual C ++(vc)。选择适当的文件夹,然后在其中找到.lib和.dll文件。

现在,无论何时编译OpenGL程序,都必须告诉编译器(实际上是链接器),以将这些文件链接到程序的目标文件。您可以通过使用适当的编译器命令行参数来执行此操作。您可以在此处阅读有关在MinGW中执行此操作的信息:See the attached image

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

希望能帮助您回答问题。