前言
最近在复习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