带有 g++ 编译器的 OpenGL C++,无法在 Windows 10 上找到 GLFW(没有 Visual Studio)

OpenGL C++ with g++ compiler, not able to find GLFW on Windows 10 (no Visual Studio)

我正在尝试使用带有 g++ 编译器的 C++ 从头开始​​设置 OpenGL API。目前我正在尝试使用 GLFW 获得一个简单的 windowing 系统,但是当我编译程序时它似乎找不到 GFLW 目录。

我正在尝试从头开始做这件事,所以我不会使用任何 IDE,比如 Visual Studio,我所做的一切都是用记事本++编写的,命令使用 git bash。我想这样做,我知道这是很多额外的工作,但这是我想要实现的。

我的项目文件夹如下所示:

-TestProject
    -main.cpp
    -GFLW
        -gflw3.h

在我的 main.cpp 文件中,我复制粘贴了 GFLW 文档中的代码:

#include <GLFW/glfw3.h>

int main(void)
{
    GLFWwindow* window;

    /* Initialize the library */
    if (!glfwInit())
        return -1;

    /* Create a windowed mode window and its OpenGL context */
    window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
    if (!window)
    {
        glfwTerminate();
        return -1;
    }

    /* Make the window's context current */
    glfwMakeContextCurrent(window);

    /* Loop until the user closes the window */
    while (!glfwWindowShouldClose(window))
    {
        /* Render here */
        glClear(GL_COLOR_BUFFER_BIT);

        /* Swap front and back buffers */
        glfwSwapBuffers(window);

        /* Poll for and process events */
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

为了编译程序,我使用 git bash 和这个命令:

g++ main.cpp -o WindowApp.exe

现在应该会创建一个 exe,使我能够打开 window,仅此而已。显然我做错了什么,其中之一是我收到 找不到目录 GFLW 的错误消息。所以这是一个问题。

基本上我想在这里 ChernoProject 学习本教程,但不必使用 Visual Studio 或任何其他 IDE。我知道他使用的文件与我不同,并且他做了一些叫做 Linking 的事情,但是我不明白这如何适应我这里的极简设置。

您包括 GLFW/glfw3.h 相对于编译器搜索路径(带尖括号),但 header 在您的项目目录树中。编译器不会在您的项目树中搜索系统 headers(包含在尖括号中),除非您通过传递 -Iinclude_directory 参数明确告诉它这样做。因此,在您的情况下,您需要像这样包含 header:#include "GLFW/glfw3.h"(推荐),或者添加 -I. 参数以告诉编译器在中搜索系统 headers当前目录。

还有关于 linking - 这将是您解决 header 问题后的下一个问题。您的编译命令如下所示:g++ main.cpp -o WindowApp.exe 并且不包含 link 的任何库。如果您使用的是 MinGW,它必须包含以下用于 OpenGL 和 GLFW3 静态 linking 的参数:-lmingw32 -lglfw3 -lopengl32 -lgdi32 -luser32.

例如,我对此项目的首选设置是:

-ProjectDirectory
    -bin
        -glfw3.dll (if you want to use dll)
    -include
        -GLFW
            -glfw3.h
            -glfw3native.h
    -lib
        -libglfw3.a
        -libglfw3dll.a (if you want to use dll)
    -src
        -main.cpp
    -build.bat

使用 build.bat 的以下内容(将 "Your actual path to g++" 更改为您系统上 g++ 的路径,或者如果它在您的路径变量中则将其设置为 "g++"):

@ECHO OFF

REM Path to g++
SET G="Your actual path to g++"

SET OBJECTS=
REM Recursive every .cpp file in ./src
FOR /R "./src" %%a IN (*.cpp) DO (
    CALL SET OBJECTS=%%OBJECTS%% "%%a"
)

@ECHO ON

%G% %OBJECTS% -obin/a.exe -Iinclude -Llib -lmingw32 -lglfw3 -lopengl32 -lgdi32 -luser32