OpenGL C ++ с компилятором g ++, не может найти GLFW в Windows 10 (без Visual Studio) - PullRequest
1 голос
/ 06 марта 2019

Я пытаюсь настроить OpenGL API с нуля, используя C ++ с компилятором g ++.В настоящее время я пытаюсь получить простую систему управления окнами с использованием GLFW, но когда я компилирую программу, она не находит каталог GFLW.

Я пытаюсь сделать это с нуля, поэтому яЯ не собираюсь использовать какую-либо IDE, такую ​​как Visual Studio, все, что я делаю, написано с использованием notepad ++ и команд, использующих 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, который позволяет мне открыть окно, не больше и не меньше.Очевидно, что я делаю что-то не так, например, я получаю сообщение об ошибке, что каталог GFLW не может быть найден .Так что это одна проблема.

По сути, я хочу следовать этому уроку здесь ChernoProject , но без использования Visual Studio или любой другой IDE.Я знаю, что он использует файлы, отличные от меня, и что он делает что-то под названием Linking, однако я не понимаю, как это адаптируется к моей минималистской настройке.

1 Ответ

3 голосов
/ 06 марта 2019

Вы включаете GLFW/glfw3.h относительно пути поиска компилятора (с угловыми скобками), но заголовок находится в дереве каталогов вашего проекта. Компилятор не выполняет поиск системных заголовков (включенных в угловые скобки) в дереве проекта, если вы специально не указали это сделать, передав аргумент -Iinclude_directory. Так что в вашем случае вам нужно либо включить заголовок, подобный этому: #include "GLFW/glfw3.h" (рекомендуется), либо добавить аргумент -I., чтобы указать компилятору искать системные заголовки в текущем каталоге.

Также относительно связи - это будет следующая проблема после того, как вы решите проблему с заголовком. Ваша команда компиляции выглядит следующим образом: g++ main.cpp -o WindowApp.exe и не содержит никаких ссылок на ссылки. Если вы используете MinGW, он должен включать следующие аргументы для статической связи с OpenGL и GLFW3: -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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...