【问题标题】:How to link against GLFW on Windows如何在 Windows 上链接 GLFW
【发布时间】:2020-10-25 10:58:18
【问题描述】:

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

从网站下载 GLFW 二进制包后,或 自己编译库,你会在包含的头文件中找到 文件夹和用于编译器的库位于其中一个 lib 文件夹中。

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

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

我下载了它,并将包含文件夹移动到我的 MinGW 包含文件夹中,但我不确定在哪里可以找到 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。我下载了它并尝试使用它从下载的文件中构建。它创建了一个新文件夹,但我不确定如何处理它。

【问题讨论】:

  • 最后是链接器错误。它告诉您必须将您的程序与适当的 glfw 库链接。 Look here
  • 从不将任何东西(头文件、库等)安装到编译器工具链的安装目录中。始终为第三方库(头文件、源代码、二进制文件)创建单独的目录树,并将该目录配置为编译器和链接器搜索路径的一部分。
  • 为什么?我已经把我的头文件和我的编译器放在了同一个目录中。
  • @Bretsky 当您以后需要更新编译器或 OpenGL 时,将它们放在不同的位置会更容易,例如删除旧目录并重新安装新版本。
  • @Bretsky 你有制作文件吗?

标签: c++ opengl glfw


【解决方案1】:
  • 首先,在 Visual Studio 中进行此类配置很容易,只需 NuGet,然后搜索 glfw,安装,Visual Studi/NuGet 将处理所有事情,例如设置正确的包含路径、附加库路径、添加附加库文件
  • 其次,您的链接问题,尝试将这些添加到您的 gcc cmd 行
    • g++ -o example.exe example.o -L. -lexample_dll
  • 第三,检查你下载的glfw库,使用MinGW-w64lib文件。还要记住区分静态库和动态库

【讨论】:

  • 静态库和动态库有什么区别?
  • 我在 GLFW 文件夹中根本找不到任何 lib 文件。
  • 我没有使用 Visual Studio,也找不到任何 lib 文件,所以我仍然不确定如何执行此操作。
  • 哦,我想你只是下载glfw的源代码,你应该从源代码构建它到lib文件。如果不想,在glfw.org/download.html中选择Windows pre-compiled binaries
【解决方案2】:

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

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

现在,无论何时编译 OpenGL 程序,都必须告诉编译器(实际上是链接器)将这些文件链接到程序的目标文件。您可以通过使用正确的编译器命令行参数来做到这一点。您可以在此处阅读有关在 MinGW 中执行此操作的信息:http://mingw.org/wiki/Specify_the_libraries_for_the_linker_to_use

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

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

【讨论】:

    猜你喜欢
    • 2021-09-29
    • 1970-01-01
    • 2016-03-04
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    相关资源
    最近更新 更多