如何在Windows上链接到GLFW
How to link against GLFW on Windows
我想学习如何使用OpenGL与c++,我在open.gl遵循教程。我在教程的这一部分,我使用的是GLFW。我试着按照说明来构建GLFW,
在您从网站或下载GLFW二进制包之后你自己编译了这个库,你会在include中找到头文件文件夹,编译器的库在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:mingwlibgccmingw324.8.1includec++thread:35:0,
from D:FilesDocumentsProgrammingopengl_tut.cpp:2:
c:mingwlibgccmingw324.8.1includec++bitsc++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:FilesDocumentsProgrammingopengl_tut.cpp: In function 'int main()':
D:FilesDocumentsProgrammingopengl_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:UsersBrettAppDataLocalTempccCJrDGj.o:opengl_tut.cpp:(.text+0xc): undefined reference to `glfwInit'
C:UsersBrettAppDataLocalTempccCJrDGj.o:opengl_tut.cpp:(.text+0x11): undefined reference to `glfwTerminate'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: C:UsersBrettAppDataLocalTempccCJrDGj.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;博士
- 尝试遵循教程使用OpenGL
- 不知道如何链接GLFW
- 找不到lib文件夹
- 与std::this_thread相关的错误
- 获得与GLFW相关的错误
编辑
我在GLFW网站上发现了一些信息,说要使用Cmake。我下载了它,并尝试用它来构建下载的文件。它新建了一个文件夹,但是我不知道该怎么做
- 首先,在Visual Studio中做这样的配置很容易,只需要NuGet,然后搜索glfw,安装,Visual Studio/NuGet会处理一切,比如设置适当的Include路径,附加库路径,添加额外的库文件 第二,它看起来像你的链接问题,试着把这些添加到你的gcc cmd行
-
g++ -o example.exe example.o -L. -lexample_dll
MinGW-w64
库文件。还要记住区分静态库和动态库看起来您已经下载了源文件。这将需要构建(使用CMake)。您应该去下载预编译的二进制文件。要做到这一点,回到glfw.org,而不是点击主页上的下载按钮,转到右上方"Windows预编译二进制文件"下面的下载选项卡。选择32位或64位版本,单击"下载"。见附图
然后,当你从。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"文件夹)。
- 无法将 GLFW 库与 Ubuntu 18.04 上的头文件链接
- GLFW需要链接什么?
- 对GLFW / Vulkan的未定义引用,尽管库似乎是链接的
- 编译器无法链接/查找 GLFW
- 链接Visual Studio代码中的GLFW
- 使用 CMake 在 Mac 上链接静态 GLFW 和 OpenGL
- 如何在Linux中使用GLFW函数正确链接C++对象?
- 为什么我需要FreeGLUT来编译和链接GLFW程序
- Vulkan + GLFW + Cmake在Linux环境下的链接问题
- Linux(X11)上GLFW上的链接器错误
- Glew - 与 GLFW 配对时 gl- 函数符号上出现链接错误
- libigl,GLEW,GLFW和Eigen在CLion,Windows 10上.链接器错误
- 在 Fedora 27 中构建 GLFW 时链接期间出错
- 如何将正确的库与 GLFW 链接为 cmake 中的外部项目
- GLFW 链接问题 Visual Studio 2012.
- GLFW MinGW 链接错误
- 尝试在Mac上编译GLFW时GLFW上的链接器错误
- 无法链接 GLFW 库
- glfw 和 MSVS 2012 的链接器错误
- 无法将 glfw 与 Ubuntu 中的 QtCreator 中的 CMake 链接