#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 категорий:
- Настройка GLEW и GLFW с помощью MSVC, но в Visual Studio.
- Настройка 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