Настройка GLEW и GLFW в VS Code с помощью Visual C

#visual-c #visual-studio-code #glfw #glew #cl

#visual-c #visual-studio-code #glfw #glew #cl

Вопрос:

У меня есть базовая среда Visual C в Visual Studio Code. Недавно я начал читать об OpenGL и пытался настроить GLEW и GLFW в VS Code. Почти все учебные пособия, которые я нахожу, попадают в одну из 2 категорий:

  1. Настройка GLEW и GLFW с помощью MSVC, но в Visual Studio.
  2. Настройка GLEW и GLFW в VS Code, но с использованием MinGW.

Я несколько раз читал документацию по командной строке MSVC и ее параметрам и не могу понять. Я не знаком с Cmake и тому подобным, поэтому я пытался сделать это с помощью задач VS Code.файл json.

Структура каталогов

Мои задачи.файл json выглядит следующим образом:

 {
    "version": "2.0.0",
    "tasks": [

        // BUILD TASK
        {
            "type": "shell",
            "label": "C/C  : build project",
            "command": "cl.exe",
            "args": [
                // exception handling args
                "/EHsc",
                // including additional headers
                "/I${workspaceFolder}\include\glew\include",
                "/I${workspaceFolder}\include\glfw\include",
                // obj files path
                "/Fo${workspaceFolder}\bin\",
                // exe file path
                "/Fe:", "${workspaceFolder}\bin\program.exe", 
                // source files
                "${workspaceFolder}\src\*.cpp",
                // library files
                "opengl32.lib",
                "${workspaceFolder}\include\glew\lib\Release\x64\glew32s.lib",
                "${workspaceFolder}\include\glfw\lib-vc2019\glfw3.lib"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$msCompile"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        },

        // CLEAN TASK
        {
            "type": "shell",
            "label": "C/C  : clean project",
            "command": "del",
            "args": [
                "${workspaceFolder}\bin\*",
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            }
        }

    ]
}
  

И мой main.cpp файл содержит несколько строк кода для открытия окна.

 #include <iostream>
#include <GL/glew.h>
#include <GLFW/glfw3.h>

using namespace std;

int main()
{
    if (!glfwInit())
    {
        cout << "Failed to initialize GLFW" << endl;
        return -1;
    }

    glfwWindowHint(GLFW_SAMPLES, 4);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    GLFWwindow* window;
    window = glfwCreateWindow(1000, 700, "Test window 01", NULL, NULL);
    if (window == NULL)
    {
        cout << "Failed to open GLFW window" << endl;
        return -1;
    }
    glfwMakeContextCurrent(window);

    glewExperimental = true;
    if(glewInit() != GLEW_OK)
    {
        cout << "Failed to initialize GLEW" << endl;
        return -1;
    }
}
  

Полный вывод терминала при выполнении задачи сборки на этом pastebin

Ответ №1:

Недавно у меня была похожая проблема, и я решил ее, используя библиотеки DLL вместо статического связывания

Для этого вы должны добавить glfw3dll.lib вместо glfw3.lib (который у вас должен быть в том же zip-файле, который вы загрузили с веб-сайта glfw, вместе с dll) и поместить dll рядом с исполняемым файлом.

Вы также должны определить GLFW_DLL , прежде чем включать любые другие заголовки glfw, как указано в документации

Ответ №2:

Правильно, я использую MinGW в качестве компилятора, и после многих дней попыток самостоятельно решить эту проблему я обнаружил, что это работает.

Изображение

Для файла задачи, который вам нужно указать (в аргументах в json задачи для vs code):

 "-g",
"-std=c  17",
"${file}",
"-I",
"./include",
"-L",
"./lib",
"-lopengl32",
"-lglew32",
"-lglfw3dll",
"-o",
"${fileDirname}\${fileBasenameNoExtension}.exe" 
  

Тогда это должно сработать. Примечание стороны, вам также необходимо glfw3.dll с glew32.dll