首页 > 其他分享 >VSCode + Mingw64配置OpenGL环境

VSCode + Mingw64配置OpenGL环境

时间:2022-11-01 02:44:42浏览次数:55  
标签:OpenGL VSCode C++ Mingw64 glfw 报错 include glad

前言

最近在复习Learning OpenGL,以前学的时候是根据书的介绍直接使用VS2022来配置OpenGL的开发环境,根据书的操作使用Cmake构建glfw3,添加glad,然后正确设置项目以来并且正确链接以后一般不会有什么问题。但是由于练习的文件都是比较简单的单文件,这一次做练习并不像新建一个vs项目,所以考虑使用vscode进行开发。本来以为会比较简单,也就是手动添加一下依赖,链接一下,但是过程中还是遇到了一些问题,花了一些时间,并且网上也没有找到相应的方法或者解决方案,所以记录一下。

这对熟悉C++开发的人来说可能十分简单,甚至是一个基础的问题,但是从我解决这个问题的角度来说,并不能有效地获取到我需要的答案,花费了一些比较多的时间,我认为还是值得写出来分享一下。
我做分享是为了回馈这个我曾经并且至今依然在受益的互联网

软件环境以及vscode插件配置

本人使用的vscode是insider版本,理论上无论insider还是stable版本都不会有影响,本人暂未验证,请自行验证。

使用到的软件以及vscode插件有:

  • C/C++(必需)
  • CMake(用来编译glfw3,有其他想法的可以使用其他替代软件)
  • msys2 (我是用msys2安装mingw64工具链,如果使用其他工具的也可以自行替换)

编写C++文件

首先我们需要新建一个文件夹作为我们的工作目录,然后按照OpenGl的CreateWindow示例,简单编写对应的C++源文件,我这里直接命名为Source.cpp,可以看到会有报错,提示找不到源文件GLAD和GLFW3

这是最好解决的,我们直接为编译器路径设置一下include路径就好(具体路径根据自己环境设置)

点击quickFix编辑includePath配置(UI界面下配置)(具体路径根据自己环境设置)

或者可以使用JSON配置 (具体路径根据自己环境设置)

注意圈出来的,我设置的编译器路径是mingw64下的的g++(具体路径根据自己环境设置),还有对应的intelliSenseMode也最好恰当地配置(理论上没配置好只会影响代码提示)

经过上面的操作,可以看到报错已经消失,但是编译代码会发现有其他错误

添加调试文件并运行代码

我们直接使用vscode的C/C++插件生成调试文件并且试着运行一下代码,ctrl + shift + p打开顶部栏选择

随后继续选择

可以看到在当前我们工作目录下的.vscode文件夹下面生成了一份launch.json文件,里面自动帮我们添加了一些内容(具体路径根据自己环境设置有所不同)

然后我们返回我Source.cpp页签,选中左边栏的调试

点击小三角形可以直接运行调试,或者我们可以继续使用ctrl + shift + p打开顶部栏选择(必须在你想要运行的Cpp文件下选择)

可以看到我们并不能正常运行,会有报错

这个问题十分简单,有基本的C++知识或者根据Learning OpenGL的操作都可以解决,我们需要把glad头文件添加到我们的项目中,这个时候我们检视一下左侧栏的文件子选栏,可以看到我们在.vscode文件夹下多了一份文件tasks.json(一般第一次都会生成,如果没有生成,重新点击小三角重新Debug一次就行,如果实在是没有自动生成,直接复制粘贴我的吧)

我们往args中添加glad.c文件的路径如下:

"args": [
  "-fdiagnostics-color=always",
  "-g",
  "${file}",
  "C:\\glad\\src\\glad.c",

  "-I",
  "C:\\glad\\include\\",
                
  "-I",
  "C:\\glfw\\glfw-3.3.8\\include\\",
                
  "-o",
  "${fileDirname}\\${fileBasenameNoExtension}.exe"
],

(上面同时添加了glfw3,如果没有加这个会有跟上面glad类似的报错,由于是同样的报错就不浪费时间讲了)

GLFW3报错相关

经过上面的处理,后面就是GLFW3相关的一堆报错了,根据Learning OpenGL可知,我们还需要添加对应的glfw3.lib(Cmake编译过程参考Learning OpenGL即可)

"args": [
    "-fdiagnostics-color=always",
    "-g",
    "${file}",
    "C:\\glad\\src\\glad.c",

    "-I",
    "C:\\glad\\include\\",

    "-I",
    "C:\\glfw\\glfw-3.3.8\\include\\",
    

    "-L",
    "C:\\glfw\\glfw-3.3.8\\build\\src\\Debug",

    "-l",
    "glfw3",

    "-l",
    "opengl32",

    
    
    "-o",
    "${fileDirname}\\${fileBasenameNoExtension}.exe"
],

本来会以为完事大吉,结果出现了更加恐怖的事情:

后面经过排查,(其实如果对Linux和Window下C/C++相关的工具链以及编译知识有所了解,这个一眼就看出是什么问题了),发现其实是动态库的使用有问题,因为我使用的是mingw64的g++编译器,不是cl编译器,不应该使用glfw3.lib库,因为我对这一块也不是很熟悉,所以下面只给出解决办法

首先使用Cmake重新编译glfw,这里我们使用Cmake GUI,在glfw文件夹下新建一个gccbuild文件夹(名字随意)

然后点击Configure

如果默认的编译器不是gcc可以指定编译器

一般不需要做修改,显示应当如下

然后点击Generate
生成以后修改一下tasks.json

(所有配置如下)


{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 生成活动文件",
            "command": "C:\\msys64\\mingw64\\bin\\g++.exe",
            "args": [
                "-g",
                "${file}",
                "C:\\glad\\src\\glad.c",

                "-I",
                "C:\\glad\\include\\",
                
                "-I",
                "C:\\glfw\\glfw-3.3.8\\include\\",

                "-L",
                "C:\\glfw\\glfw-3.3.8\\gccbuild\\CMakeFiles\\src",
                
                "-l",
                ":libglfw3.a",

                "-l",
                ":libgdi32.a",

                "-l",
                ":libopengl32.a",
                
                
                "-fdiagnostics-color=always",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",

            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

然后就可以正常编译愉快写代码啦!

标签:OpenGL,VSCode,C++,Mingw64,glfw,报错,include,glad
From: https://www.cnblogs.com/dotlink/p/16846447.html

相关文章

  • VScode Configuration STM32
    基于VScode搭建STM32运行环境所需软件vscode:是我们的代码编辑器STM32CubeMX:是我们配置和初始化的软件OpenOCD:是开源片上调试器,他下载完是一个压缩包,需要配......
  • [vscode] 如何在终端添加git bash?
    设置-搜索"terminal.integrated.profiles.windows"将以下内容复制进入,注意要修改gitbash实际路径{"terminal.integrated.profiles.windows":{"PowerShell":......
  • [VScode] 常用设置以及常用操作
    常用快捷键:Ctrl+P:搜索打开文件Ctrl+`:快速打开关闭终端.Ctrl+T:全局字符搜索Ctrl+Shift+O:在当前文件中搜索变量函数Alt+O:切换源头文件Ctrl+......
  • [VScode] 嵌入式软件开发必备插件
    C/C++c/c++智能提示、调试和代码浏览C++Intellisense借助GNUGlobal标签的c/c++智能提示BracketPairColorizer一个可定制的扩展为匹配括号着色Chinese(Simplified)......
  • 2022.10.21----vscode-自定义事件
     vscode预览模式关闭,就能打开新标签页(43条消息)vscode新窗口打开文件-CSDN (43条消息)如何在vscode中打开新文件夹不覆盖上一个窗口标签_发呆的薇薇°的博客-......
  • 谈OpenGL中的”对象“
    和linux中的文件描述符一样地去理解、可以用整数去指代输入输出流、文件、设备那就同样可以用整数去代表一个VAO、VBO差不多就是这个原理。 opengl的workflow、差......
  • 问题:怎样从命令行新建文件并用VScode打开&VScode启动并新建文件
    问题:怎样从命令行新建文件并用VScode打开&VScode启动并新建文件解决howtostartvscodefromterminal-Search(bing.com)HowtostartVSCodefromtheterminal(......
  • 关于opengl的”版本“
    固定流水线=立即模式(immediateprofile)可编程模式=核心模式(coreprofile)Opengl 3.2以后、立即模式(或者说是固定管线)被废弃、意味着glVertex__()这种函数都不应该用......
  • 【软件使用】【VSCode】【Debugger for Chrome的使用】
    【软件使用】【VSCode】【DebuggerforChrome的使用】https://img-view-wj.oss-cn-nanjing.aliyuncs.com/img/it/soft/vscode/DebuggerforChrome/image-2022103111541643......
  • Vscode插件推荐
    Vscode插件推荐主题/外观MaterialTheme(集成了多种主题皮肤,搭配MaterialIconTheme食用更佳)MaterialIconTheme(扁平化的主题图标库)vscode-icons(VSCode官方出......