使用Visual C ++在VS Code中设置GLEW和GLFW

问题描述

我在Visual Studio Code中有一个基本的Visual C ++环境。我最近开始阅读有关OpenGL的文章,并一直试图在VS Code中设置GLEW和GLFW。我发现几乎所有的教程都属于以下两类之一:

  1. 使用MSVC进行的GLEW和GLFW设置,但在Visual Studio中
  2. 在VS Code中设置了GREW和GLFW,但具有minGW。

我已经阅读了几次有关MSVC命令行及其选项的文档,无法弄清。我对Cmake并不熟悉,所以我一直试图通过VS Code tasks.json 文件来实现。

Directory structure

我的 tasks.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上运行构建任务时,完整的终端输出

解决方法

我最近有一个类似的问题,并且通过使用dll而不是静态链接来解决了该问题

为此,您将添加glfw3dll.lib而不是glfw3.lib(您应该在从glfw网站下载的同一个zip文件中,并在dll旁边)并将dll放置在可执行文件附近

您还应该在包含其他glfw标头之前定义GLFW_DLL,如documentation所述

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...